0

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>
4

1 に答える 1

0

問題が何であるかがわかりました。

私の言語スイッチャーは、「en-us」を使用して英語を設定していました。

これは、英語の選択肢が複数ある場合にのみ適切です。その場合、ロケール フォルダー内に en_US フォルダー (およびその中にある他の django.po および django.mo) が必要です。

英語のオプションを 1 つだけ使用したいので、スイッチャーの値として「en」を使用できます。"en" が django のデフォルトであるため、追加のロケール フォルダーは必要ありません。

これが役立つと思う人のために、ここに修正があります:

この線:

< input type="hidden" name="language" value="en-us" />

次のようにする必要があります。

< input type="hidden" name="language" value="en" />

于 2013-08-10T17:56:40.820 に答える