6

Django ドキュメントから:

カスタム設定を定義する場合、言語を翻訳文字列としてマークしても問題ありませんLANGUAGES (上に表示されているデフォルト値のように) 。モジュール自体が設定に依存し、循環インポートが発生するため、設定ファイル内からインポートしない でください。解決策は、「ダミー」関数を使用することです。サンプル設定ファイルは次のとおりです。gettext()django.utils.translationdjango.utils.translationgettext()

gettext = lambda s: s LANGUAGES = ( ('de', gettext('German')), ('en', gettext('English')), )

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

言語を実際にラップするとは、正確にはどういう意味gettext()ですか? コードでどのように呼び出す必要がありますか?

4

4 に答える 4

3

まさにそれが言っていること: 言語名を実際に使用するとき、またはユーザーに表示するときに、言語名に対して gettext() を呼び出します。

from django.utils.translation import ugettext

for lang_code, lang_name in settings.LANGUAGES:
    translated_name = ugettext(lang_name)
    ...

(Django のすべてのテキストは Unicode であるため、通常は gettext ではなく ugettext を使用する必要があります。)

テンプレートで同等のことを行うには、舞台裏で ugettext を呼び出すだけの {% blocktrans %} タグを使用します。

{% for lang in LANGUAGES %}
  {% blocktrans %}{{ lang.1 }}{% endblocktrans %}
{% endfor %}
于 2009-08-25T18:37:27.773 に答える
0

これは実際には、上記の Q&A に対するコメントと詳細な説明です。私は自分の翻訳を機能させることができず、ドキュメントを読んで再読し、オンラインで何時間も検索しました。

私はもともと持っていました:

LANGUAGES = (
    ('en', 'English'),
    ('nl', 'Dutch'),
    )

これはうまくいかないでしょう、そしてこれを読んだ後に試しました

ugettext = lambda s: s
LANGUAGES = (
    ('en', ugettext('English')),
    ('nl', ugettext('Dutch')),
    )

これですべてが機能しました...そして私はこれを検索しました.https://docs.djangoproject.com/en/1.4/topics/i18n/translation/#how-django-discovers-language-preference、このセクションの下部に向かって...

于 2012-07-14T15:26:54.957 に答える