我注意到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 %}
对于简单的字符串,实际上没有关于何时使用|t
vs.的规则%trans
。因此,我建议您使用模板中最容易阅读的内容。以我的经验,|t
对于短字符串,使用过滤器效果很好,而%trans
对于较长的文本字符串,使用块则更容易。
有关用法的更多信息,请参见:https://www.drupal.org/node/2357633和此处https://www.drupal.org/developing/api/8/localization