{{| t}}和{%trans%}有什么区别?


11

我注意到Drupal 8支持{% trans %},根据Symfony文档(i18n Extension),它为Twig添加了gettext支持。

{{ |t }}据我所知,是将可翻译字符串添加到Drupal模板的传统方法。根据文档t()将字符串转换为当前语言或给定语言。

两者都支持多语言网站。

  • 这些扩展之间有什么区别?
  • 我什么时候应该使用另一种?

我用反式表示复数。否则简单的t。例如“ {%trans%}项{%plural count%}项{%endtrans%}”

Answers:


21

当在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


很棒的解释。谢谢!严重缺乏对do的解释(IMHO)。您对示例的更详尽的解释对我很有帮助,并给了我一些建议。特别是复数字符串示例。真漂亮!
Tyler Youngblood
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.