web-dev-qa-db-ja.com

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

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

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

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

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

_{{ |t }}_フィルターと_{% trans %} ... {% endtrans %}_ブロックの両方をTwigテンプレートファイルをDrupalで使用する場合)は、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 %}
_

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

使用法の詳細については、こちらをご覧ください: https://www.drupal.org/node/23576 およびこちら https://www.drupal.org/developing/api/8 /ローカリゼーション

21
eojthebrave