我需要包含两个按钮或链接,以允许用户在英语和西班牙语之间切换语言。我已经阅读了文档并尝试了以下内容:
<form action="/i18n/setlang/" method="post">{% csrf_token %}
<input name="language" type="hidden" value="es" />
<input type="submit" value="ES" />
</form>
然而,每次我点击按钮时,页面都会重新加载,但语言根本没有改变。我错过了什么吗?
注意:我没有设置next
,因为我只想在所需的语言下重新加载当前页面。
如果我使用文档提供的默认表单,结果是相同的:页面重新加载但语言没有改变:
<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>
更新:
经过进一步测试,我注意到在urls.py
中同时使用i18n_patterns
和patterns
存在问题。目前我的文件看起来像:
urlpatterns = i18n_patterns('',
url(r'^contents/', include('contents.urls')),
url(r'^events/', include('events.urls')),
# ...
)
urlpatterns += patterns('',
url(r'^i18n/', include('django.conf.urls.i18n')),
)
这似乎不起作用。但是,如果我删除 i18n_patterns
并将其更改为 patterns
,那么它似乎可以工作:
urlpatterns = patterns('',
url(r'^contents/', include('contents.urls')),
url(r'^events/', include('events.urls')),
# ...
)
urlpatterns += patterns('',
url(r'^i18n/', include('django.conf.urls.i18n')),
)
文档中说您不必将其包含在内部,因此我认为这应该有效,但事实并非如此!无论您是在
i18n_patterns
之前还是之后包含django.conf.urls.i18n
,它总是表现出相同的结果。
django_language
的cookie,请使用浏览器的开发工具查看在之前和之后有哪些cookie。 - Ziyan