4

i18nをサポートするためにdjango i18nを使用しています。django blocktrans オブジェクトでは、dict が直接機能しないことがわかりました。

たとえば、obj という名前のオブジェクトがあり、それを次のように使用しようとすると、

{% blocktrans %} My name is {{ obj.name }} {% endblocktrans %}

動作しませんが、次のように使用すると

{% blocktrans with name=obj.name %} My name is {{ name }} {% endblocktrans %}

動作します。

最初の例が機能しなかったのに、2 番目の例が機能した理由を知りたいだけです。

4

2 に答える 2

4

Djangoblocktransは ugettext に渡され、u"My name is %(name)s" 形式の翻訳文字列としてマークされ、実行時にマッピングとしてコンテキストで処理されます。つまり、`u"My name is %(name)s " % 環境。これは、Django テンプレート スタイルの属性解決を許可しません。

于 2012-07-05T07:47:41.700 に答える
1

Djangoのドキュメントから「テンプレート式を翻訳するには、たとえば、オブジェクト属性にアクセスしたり、テンプレートフィルターを使用したりします。翻訳ブロック内で使用するために、式をローカル変数にバインドする必要があります」

テンプレートコードを掘り下げずに、翻訳操作は、テンプレートをレンダリングするときにdjangoが行うgetattr/automatic呼び出しの前に実行されると推測します。

于 2012-07-05T07:44:19.453 に答える