我注意到Drupal 8支持{% trans %},根据Symfony文档(i18n Extension),它为Twig添加了gettext支持。
{{ |t }}据我所知,是将可翻译字符串添加到Drupal模板的传统方法。根据文档,t()将字符串转换为当前语言或给定语言。
两者都支持多语言网站。
- 这些扩展之间有什么区别?
- 我什么时候应该使用另一种?
我注意到Drupal 8支持{% trans %},根据Symfony文档(i18n Extension),它为Twig添加了gettext支持。
{{ |t }}据我所知,是将可翻译字符串添加到Drupal模板的传统方法。根据文档,t()将字符串转换为当前语言或给定语言。
两者都支持多语言网站。
Answers:
当在Drupal的Twig模板文件的上下文中使用时,{{ |t }}filter和{% trans %} ... {% endtrans %}block都是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