И {{ |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.