ユーザーが英語とスペイン語の間で言語を変更できるようにするには、2 つのボタンまたはリンクを含める必要があります。ドキュメントを読んで、これを試しました:
<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
before または afterを含めるかどうかは関係ありませんi18n_patterns
。常に同じことを行います。