Django 使用“后无法设置语言”;i18n“U型”;在URL中显示语言前缀的步骤
正如所建议的,我希望在URL中显示一个语言前缀,并允许访问我网站的访问者使用模板中的表单更改语言。到目前为止,我一直在使用Django文档上和中的部分作为指南。我的代码大部分是从这个源代码复制的Django 使用“后无法设置语言”;i18n“U型”;在URL中显示语言前缀的步骤,django,internationalization,django-templates,translation,django-urls,Django,Internationalization,Django Templates,Translation,Django Urls,正如所建议的,我希望在URL中显示一个语言前缀,并允许访问我网站的访问者使用模板中的表单更改语言。到目前为止,我一直在使用Django文档上和中的部分作为指南。我的代码大部分是从这个源代码复制的 问题 在我的URLconf中没有使用“i18n_模式”(在“模式”中有两个“url”调用),我设法在index.html页面上选择语言,并让Django将我重定向到使用我选择的新语言的同一页面。当然,语言URL前缀不会显示 当我使用“i18n_模式”时,语言前缀出现在URL中,但似乎破坏了从index
问题 在我的URLconf中没有使用“i18n_模式”(在“模式”中有两个“url”调用),我设法在index.html页面上选择语言,并让Django将我重定向到使用我选择的新语言的同一页面。当然,语言URL前缀不会显示 当我使用“i18n_模式”时,语言前缀出现在URL中,但似乎破坏了从index.html表单更改语言的能力。例如,如果我设置为英语,并且我在表单中从“English(en)”更改为“Türkçe(tr)”,那么页面基本上会进行刷新,而不会更改为土耳其语(英语仍然显示)。但是,我可以通过将URL语言前缀从“/en/”更改为“/tr/”来更改语言 页面/模板/页面/索引.html:
{% load i18n %}
<html>
<head>
...
</head>
<body>
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>
...
</body>
</html>
注意:我使用的模板位于名为“页面”的应用程序中
如果您能帮助我们一起工作,我们将不胜感激!到目前为止,我还没有找到与此问题有关的任何信息。如果需要更多信息,请询问 这包含进一步的细节和一些可能的问题答案。没有一个解决方案是真正有吸引力的;也不应该真的需要。不幸的是,这似乎是Django的一个问题,在Django中,两个所需的“特性”无法“开箱即用”地协同工作,从而产生所需的效果。在我的例子中,因为我的站点是一个单页站点,所以我可以通过将上下文变量设置为“redirect_to”='/'(在视图中)来解决这个问题
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
urlpatterns = patterns('',
url(r'^i18n/', include('django.conf.urls.i18n')),
)
urlpatterns += i18n_patterns('',
url(r'', include('pages.urls', namespace='pages')),
)