带有数组的Symfony翻译消息,查找长度



设置:

考虑使用Symfony 3构建的多语言网站的情况,使用YAML文件进行翻译消息,使用TWIG模板进行显示。

在内容的一个部分,用英语,应该有一个说明,显示3个项目,每个项目代表一个过程的一个步骤。德语应该只有2个,而西班牙语有50个。

这方面的设置可能是例如:

#messages.en.yaml
root_node:
-
title: English title 1
item: Some first list item
-
title: English title 2
item: Some second list item
-
title: English title 3
item: Some third list item

#messages.de.yaml
root_node:
-
title: German title 1
item: Some other first list item
-
title: German title 2
item: Some second German list item

#messages.es.yaml
root_node:
-
title: Spanish title 1
item: Some Spanish first list item
...
etc ...

考虑到这种结构,理想情况下,我希望模板读取root_node是一个数组的事实,获取它的长度,以便我们可以显示步骤的总数,然后在twitch模板中创建一个结构,该结构在数组上循环,并将步骤输出为一些翻译的标题和项目文本。

尝试通过{{'root_node'|length}}{{('root_node'|trans)|length}}读取数组长度只会给出文本的长度,而{{root_node|length}}会给出错误,因为变量不在模板的范围内,因为应该通过翻译服务查找。

问题:

如何在这个转换键上读取数组的长度?是否应该以这种方式尝试?如果没有,是否有在Symfony中翻译未知大小数组(取决于翻译语言)的最佳实践?

Symfony翻译器无法直接实现这种行为。然而,它可以通过Symfony中的复数机制间接实现。

您可以使用PluralizationRules::set方法设置自定义复数逻辑,然后调用Translator::transChoice,并将传递的步骤号作为参数进行选择。您需要在模板中使用transchoice(index)过滤器来获得所需的步骤。

您可以通过从翻译目录中单独计数并传递到模板来获得特定语言环境的步骤列表。或者,根据应用程序的逻辑,您可以简单地获得当前步骤的翻译消息,并测试它是否为空字符串。

最新更新