2

これがばかげているように聞こえることはわかっていますが、何が問題なのかわかりません。ユーザー認証に組み込みのビューを使用しており、ログインとログアウトにより、現在のセッションの言語がデフォルト以外の言語にそれぞれ切り替わります。

私は 2 つの言語を持っています。Djangoproject サイトのドキュメントに従ってセットアップします。つまり、locale フォルダーにあり、.mo ファイルとすべてがあります。罰金。

/i18n/setlang に投稿するすべてのユーザーの言語切り替えを可能にするフォーム ベースの言語切り替えがあります。

それで、私の質問は、ログアウトまたはログインを行うときに言語を切り替えるのが「POST」のように見えるのはなぜですか(どちらもPOSTだと思います)。

これについて可能な限りの光を当ててくれてありがとう。

編集:決して元に戻らないことを追加する必要があります。言語を一方向、つまりデフォルトではない言語にのみ切り替えます。

EDIT2:それ以上の回答を引き付けるとは思いませんが、ここに私の言語スイッチャーのコードがあります(jQueryを介してオンザフライで切り替えます。問題は、それがドイツ語に行き、ログアウトするたびにそこにとどまるということです(ログアウトはによって処理されますDjango のログアウト ビュー)。

<ul>            
    <li>
        <form name="setLangen" action="/i18n/setlang/" method="POST"><div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='871Y71JyfG9WcieiKr8jjwe4j37IkIfq' /></div>
        <input name="next" type="hidden" value="/" />
        <input type="hidden" name="language" value="en" />
        <a href="#" onclick="document.setLangen.submit();return false;">English</a>
        </form>
    </li>

    <li>
        <form name="setLangde" action="/i18n/setlang/" method="POST"><div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='871Y71JyfG9WcieiKr8jjwe4j37IkIfq' /></div>
        <input name="next" type="hidden" value="/" />
        <input type="hidden" name="language" value="de" />
        <a href="#" onclick="document.setLangde.submit();return false;">Deutch</a>
        </form>
    </li>

</ul>
4

2 に答える 2

0

わかった。だからここに答えがあります。他の誰かがこの状況に陥る可能性があるので、私はそれを書き留めると思いました。

問題は、djangoロケールのミドルウェアと、brwoserが選択した言語を削除する独自のミドルウェアとの間で順序を切り替えていたことです。Djangoがそれを引き継いで、ブラウザが指示するものに言語を設定する前に、独自のインターセプトを維持する必要があります(これはどのような場合でも本当に奇妙なデフォルトの動作です)。

それが誰かを助けることを願っています。

'myapp.middleware.ForceDefaultLanguageMiddleware',   # <-- BEFORE django locale!!
'django.middleware.locale.LocaleMiddleware',
于 2012-05-12T13:06:59.573 に答える