1

プロジェクトの設定ファイルで、i18nの言語の選択を制限したい場合は、次のように記述します。

gettext = lambda s: s

LANGUAGES = (
    ('Fr', gettext('French')),
    ('en', gettext('English')),
)

しかし、私はこれを書きます:

LANGUAGES = (
    ('fr', 'cool dudes'),
    ('en', 'Anglais')
    )

タプルの2番目の項目に何を入れても(「gettext = lambda s:s」かどうかに関係なく)、Djangoはレンダリングされたページの言語セレクターに「Français」と「English」を戻します。そのセレクターのキャプションの言語データ:

{'code':'fr', 'name':'French', 'bidi':False, 'name_local':u'Fran\xe7ais'}
{'code':'en', 'name':'English', 'bidi':False, 'name_local':u'English'}

それは私を困惑させるので、この設定のために2アイテムのタプルを持つことのポイントは何ですか?

4

1 に答える 1

1

設定に関するDjangoのドキュメントでは、この2番目の値とその使用方法について説明しています。

...この配置では、django-admin.py makemessagesはこれらの文字列を検索して翻訳対象としてマークしますが、実行時に翻訳は行われないため、言語を実際のgettext(でラップすることを忘れないでください。 )実行時にLANGUAGESを使用するコード。

2タプルの2番目の文字列は、人間が読める言語名の表現を目的としています。gettext()翻訳可能な文字列としてマークするために、toの呼び出しで2番目の値をラップします。ただし、の通常の実装はgettext()設定モジュールでは使用できないため、コードが示すように、ダミーの実装を定義する必要があります。言語名をローカライズする場合は、使用時に値を実際にラップする必要がありgettext()ます。

言語セレクターUIのテンプレートコードは表示されません。使用していget_language_info()ますか?name_localドキュメントに示されている例には示されていませんが、要素をでラップする必要があるように見えます_()。(しかし、私はこれをテストしていません。)

from django.utils.translation import get_language_info
li = get_language_info('de')
print(li['name'], _(li['name_local']), li['bidi'])
于 2012-11-22T08:11:53.760 に答える