Djangoテンプレートでは、{{ _("Hello World") }}
または_{% trans "Hello World" %}
_のいずれかを使用して、文字列を翻訳対象としてマークできます。ドキュメントでは、「公式」アプローチは- _{% trans %}
_ タグですが、_()
構文も記載されています once 。
これらのアプローチの違い(構文を除く)、なぜ一方が他方よりも望ましいのでしょうか?
1つの違いは、タグとフィルターで_{% trans %}
_を使用できないことは明らかです。しかし、それは、_()
のように、どこでも{{ _("String") }}
を使用できるということですか?動作し、スタンドアロン文字列で_{% trans "String" %}
_を使用し、タグとフィルターで_()
を使用するよりもずっときれいで一貫性があります。
したがって、Django 1.5。の場合、技術的に違いはないようです。テンプレートエンジンは、2つの場合に(translate
属性を設定することにより)内部で変数を変数にマークします):
{% trans VAR %}
_を実行する場合( TranslateNode
を参照)、または_(
_で始まり、_)
_で終わる場合( _Variable.__init__
_ を参照)。後で、変数が 解決済み である場合、Djangoは、ugettext
属性が見つかった場合、pgettext
またはtranslate
でラップします。
ただし、ソースコードからわかるように、_{% trans %}
_タグを優先する柔軟性の考慮事項がいくつかあります。
{% trans "String" noop %}
_を実行できます。これにより、翻訳用の文字列が.poファイルに入れられますが、レンダリング時に出力は実際には翻訳されません(変数の内部translate
属性、ugettext
呼び出しなし)。{% trans "May" context "verb" %}
_;など{% trans "String" as translated_string %}
_など。* Django 1.4。
何かが足りない場合は、お気軽に修正するか、より良い回答を投稿してください。
Transテンプレートタグは、ugettext()関数を呼び出します。 In Django_()はugettext()これは Django docs で説明されています。