Django を使用して、ユーザーがサイトの言語を選択できるようにしたいと考えています。
ブラウザで設定されたユーザーの優先言語が英語の場合、問題なく動作します。ユーザーは期待どおりに英語とポルトガル語を切り替えることができます。
ただし、ブラウザーの優先言語を変更すると、言語スイッチャーが機能しなくなります (Opera、Google Chrome、Firefox、および Epiphany でテストしましたが、IE または Safari ではテストできませんでした)。
何か間違ったことをしたと思いますが、何が原因なのかわかりません。優先言語をデフォルトに戻しても問題なく動作することに困惑しています...
Django のドキュメントには、言語を選択するために以下を使用すると書かれています。
まず、現在のユーザーのセッションで django_language キーを探します。それができない場合は、Cookie を探します。それができない場合は、Accept-Language HTTP ヘッダーを調べます。このヘッダーはブラウザから送信され、優先度の高い順に、優先する言語をサーバーに伝えます。Django は、利用可能な翻訳が見つかるまで、ヘッダー内の各言語を試します。これに失敗すると、グローバル LANGUAGE_CODE 設定が使用されます。
ブラウザーに優先言語が設定されている場合と、既定の言語が設定されている場合で、言語スイッチャーの動作が異なるのはなぜですか?
ミドルウェアに関する私のsettings.pyは次のとおりです
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
私のロケールフォルダーには構造が含まれています:
locale/
pt_BR/
LC_MESSAGES/
django.mo
django.po
私の言語スイッチャー(テンプレート内)は次のとおりです。
<div id="secondary-menu" class="navigation">
<ul class="menu">
<li><a href="/about-us" > {{ second1 }}</a></li>
<li><a href="/free-culture" > {{ second2 }}</a></li>
<li><a > {{ second3 }}</a>
<ul>
<li><form name="setLangEnglish" method="post" action="/i18n/setlang/">{% csrf_token %}
<input name="next" type="hidden" value="/" />
<input type="hidden" name="language" value="en-us"/>
<input class="language-switcher" type="submit" alt="English" name="submit" value="English"/>
</form>
</li>
<li><form name="setLangPortuguese" method="post" action="/i18n/setlang/">{% csrf_token %}
<input name="next" type="hidden" value="/" />
<input type="hidden" name="language" value="pt-br"/>
<input class="language-switcher" type="submit" alt="Portugues" name="submit" value="Portugues"/>
</form>
</li>
</ul>
</li>
</ul>
</div>