Djangoのテンプレートを使用して文字列翻訳に協力

2644 ワード

Djangoテンプレートは2つのテンプレートラベルを使用しており、構文フォーマットはPythonコードとは若干異なります.テンプレートをラベルにアクセスさせるには、{%load i 18 n%}をテンプレートの一番前に置く必要があります.
この{%trans%}テンプレートタグは、定数文字列(単一または二重引用符で囲まれている)または可変内容を翻訳します.

{% trans "This is the title." %}
{% trans myvar %}


noopオプションがある場合、変数クエリーは有効ですが、翻訳はスキップされます.空席の内容が将来翻訳されるように要求される場合、これは役に立ちます.

{% trans "myvar" noop %}


テンプレート変数を混入することは、{%trans%}付き文字列では不可能です.翻訳文に変数(プレースホルダplaceholders)の文字列が必要な場合は、{%blocktrans%}を使用します.

{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}


テンプレートフィルタを使用してテンプレート式を翻訳するには、翻訳されたテキストでローカル変数に式をバインドする必要があります.

{% blocktrans with value|filter as myvar %}
This will have {{ myvar }} inside.
{% endblocktrans %}


blocktransラベルに複数の式をバインドする必要がある場合は、andで区切ることができます.

{% blocktrans with book|title as book_t and author|title as author_t %}
This is {{ book_t }} by {{ author_t }}
{% endblocktrans %}


単一複素数に関連する内容を表すには、{%blocktrans%}と{%endblocktrans%}の間に{%plural%}ラベルを使用して単一複素数の形式を指定する必要があります.たとえば、次のようにします.

{% blocktrans count list|length as counter %}
There is only one {{ name }} object.
{% plural %}
There are {{ counter }} {{ name }} objects.
{% endblocktrans %}


その内在的なメカニズムは、すべてのブロックと埋め込み翻訳が対応するgettextまたはngettextを呼び出すことである.
各RequestContextは、3つの指定された翻訳変数にアクセスできます.
  •     {{LANGUAGES}}は一連のメタグループからなるリストであり、各メタグループの最初の要素は言語コードであり、2番目の要素はその言語で表される言語名である.
  •     一二文字列としてLANGUAGE_CODEは現在のユーザーの優先言語です.例:en-us.(以下のDjangoを参照して言語の好みを発見する方法)
  •     LANGUAGE_BIDIは現在の地域の説明です.真(True)の場合、右から左に書く言語です.例えば、ヘブライ語、アラビア語です.偽(False)であれば、英語、フランス語、ドイツ語など、左から右に書く言語です.

  • このRequestContext拡張を使用しない場合は、3つの値にタグを付けることができます.
    
    {% get_current_language as LANGUAGE_CODE %}
    {% get_available_languages as LANGUAGES %}
    {% get_current_language_bidi as LANGUAGE_BIDI %}
    
    

    これらのタグには、{%load i 18 n%}も必要です.
    翻訳されたhookは、定数文字列を受け入れるテンプレートブロックラベル内でも使用できます.この場合、_を使用()式は、次のような翻訳文字列を指定します.
    
    {% some_special_tag _("Page not found") value|yesno:_("yes,no") %}
    
    

    この場合、タグとフィルタの両方に翻訳された文字列が表示され、翻訳操作を警戒する必要はありません.
    コメント:
    この例では、翻訳構造は、個別の文字列「yes」および「no」ではなく、文字列「yes,no」を見逃す.翻訳された文字列には、フィルタ解析コードがパラメータを分割する方法を理解するためにカンマを含める必要があります.たとえば、ドイツ語の翻訳機では、文字列「yes,no」が「ja,nein」(カンマをそのまま保持)に翻訳される場合があります.