{{| t}}と{%trans%}の違いは何ですか?


11

Drupal 8がサポートし{% trans %}ていることに気づきました。Symfonyのドキュメント(The i18n Extension)によれば、Twigにgettextサポートが追加されています。

{{ |t }}私の知る限り、Drupalテンプレートに翻訳可能な文字列を追加する従来の方法です。ドキュメントによればt()、文字列を現在の言語または特定の言語に翻訳します。

どちらも多言語のウェブサイトをサポートしています。

  • これらの拡張機能の違いは何ですか?
  • いつどちらを使用すればよいですか?

複数形にはトランスを使います。そうでなければ単純なt。たとえば、「{%trans%} item {%plural count%} items {%endtrans%}」

回答:


20

{{ |t }}フィルターと{% trans %} ... {% endtrans %}ブロックの両方が、DrupalのTwigテンプレートファイルのコンテキストで使用される場合、Drupalローカリゼーションシステムの一部です。そして、どちらかで処理された文字列の翻訳は、同じ方法で、localize.drupal.orgを介して処理されます。単純なテキスト文字列の場合、それらは交換可能に使用できますが、%transブロックには、複雑な文字列に対していくつかの便利な機能が追加されています。

違いは、tフィルターでは単純な文字列のみが許可されるのに対し、%transブロックを使用すると、文字列内で動的プレースホルダーを使用できることです。php t()関数を使用するのとよく似ています。

ここにいくつかの例があります:

tフィルターによる簡単な文字列変換:

{{ 'Hello Stack Exchange!'|t }}

プレースホルダーを使用した文字列変換:

{% trans %}Hello {{ user.name }}, today's date is {{ date|placeholder }}.{% endtrans %}

プレースホルダーはデフォルトでエスケープされていますが、そのままにすることも{{ var|passthrough }}、プレースホルダーとしてフォーマットすることもできます{{ var|placeholder }}。これは、t()関数でそれぞれ@string、!string、%stringを使用することと同じです。

%trans複数の文字列をフォーマットするためにブロックを使用することもできます。

{% trans %}
  There is 1 comment.
{% plural count %}
  There are {{ count }} comments.
{% endtrans %}

単純な文字列の場合、|tvsをいつ使用するかについての規則はありません%trans。したがって、テンプレートで最も読みやすいものを使用することをお勧めします。私の経験では、|tフィルタを使用すると短い文字列でうまく機能しますが、%trans長いテキスト文字列ではブロックが簡単です。

使用方法の詳細については、https//www.drupal.org/node/2357633およびこちらのhttps://www.drupal.org/developing/api/8/localizationを参照してください。


素晴らしい説明。ありがとうございました!doの説明は非常に欠けていました(IMHO)。例を使ったより詳細な説明は、私を大いに助け、私にいくつかのアイデアを与えました。特に複数文字列の例。それはかなり滑らかです!
Tyler Youngblood
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.