И {{ |t }}
фильтр, и {% trans %} ... {% endtrans %}
блоки, используемые в контексте файла шаблона Twig в Drupal, являются частью системы локализации Drupal. И перевод для строк, обработанных любой из них, обрабатывается таким же образом и через localize.drupal.org. Для простых строк текста их можно использовать взаимозаменяемо, однако %trans
блок имеет некоторые дополнительные полезные функции для сложных строк.
Разница в том, что t
фильтр допускает только простые строки, а использование %trans
блока позволяет использовать динамические заполнители в строке. Очень похоже на использование t()
функции php .
Вот несколько примеров:
Простой перевод строки через t
фильтр:
{{ 'Hello Stack Exchange!'|t }}
Перевод строки с заполнителем:
{% trans %}Hello {{ user.name }}, today's date is {{ date|placeholder }}.{% endtrans %}
Заполнители по умолчанию экранированы, но их также можно оставить неэкранированными {{ var|passthrough }}
или отформатировать как заполнитель {{ var|placeholder }}
. Это эквивалентно использованию @string,! String и% string в функции t () соответственно.
Вы также можете использовать %trans
блоки для форматирования множественных строк.
{% trans %}
There is 1 comment.
{% plural count %}
There are {{ count }} comments.
{% endtrans %}
Для простых строк действительно нет правил о том, когда вы должны использовать |t
против %trans
. Поэтому я бы порекомендовал использовать все, что проще всего читать в вашем шаблоне. По моему опыту, использование |t
фильтра хорошо работает для коротких строк, в то время как %trans
блок легче для длинных строк текста.
Более подробную информацию об использовании можно найти здесь: https://www.drupal.org/node/2357633 и здесь https://www.drupal.org/developing/api/8/localization.