В чем разница между {{| t}} и {% trans%}?

11

Я заметил, что поддержка Drupal 8, {% trans %}которая, согласно документации Symfony ( расширение i18n ), добавляет поддержку gettext в Twig.

{{ |t }}Насколько я знаю, это устаревший способ добавления переводимых строк в шаблоны Drupal. Согласно документации , t()переводит строку на текущий язык или заданный язык.

Оба поддерживают многоязычный сайт.

  • Каковы различия между этими расширениями?
  • Когда я должен использовать один над другим?
itsdarrylnorris
источник
Я использую транс для множественного числа. В противном случае просто т. Например, «{% trans%} item {% множественное число%} items {% endtrans%}»

Ответы:

21

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

eojthebrave
источник
Потрясающее объяснение. Спасибо! Объяснение по до не было (ИМХО). Ваше более подробное объяснение с примерами очень помогло мне и дало пару идей. Особенно пример строки во множественном числе. Это довольно гладко!
Тайлер Янгблад