我需要包含两个按钮或链接,以允许用户在英语和西班牙语之间切换语言。我已经阅读了文档并尝试了这个:
<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>
更新:
i18n_patterns
经过进一步测试,我注意到patterns
在urls.py
. 目前我有一个看起来像这样的文件:
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
如果你在之前或之后包含它并不重要,i18n_patterns
它总是一样的。