我需要根据性别和数量翻译法语短语。 在message.fr.yml中,我有:
key.toto: "male_singular: tu es venu 1 fois donc 1 vie|female_singular: tu es venue 1 fois donc 1 vie|male_plural: tu es venu %count% fois donc %count% vies|male_singular: tu es venue %count% fois donc %count% vies"
我在transchoice()使用的Symfony \ Component \ Translation \ MessageSelector的doc中看到了
索引解决方案还可以包含标签(例如:一个:有一个苹果)。
这纯粹是为了使翻译更加清晰 - 它不会影响功能。
这两种方法也可以混合使用:
{0}没有苹果|一个:有一个苹果|更多:%count%苹果
但是当我用这样的电话叫做transchoice
transchoice("key.toto", "female_singular", array(), "messages")
我有:
“tu es venu 1 fois donc 1 vie”
而不是:
“tu es venue 1 fois donc 1 vie”
我更喜欢使用标签而不是{},因为消息文件是由另一家企业翻译的。
有什么想法吗?
答案 0 :(得分:0)
来自Translation
组件documentation:
标签实际上只是翻译人员的提示,不会影响翻译 逻辑用于确定使用哪种复数形式。
和
由于标签是可选的,因此翻译人员不会使用它们(翻译人员) 只会根据字符串中的位置得到一个字符串。)
您可以确定是否打开transChoice()
方法的the source code:
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
{
...
return strtr($this->selector->choose($catalogue->get($id, $domain), (int) $number, $locale), $parameters);
}
如您所见,transChoice()
将$number
参数转换为int。
Manual说PHP
将"female_singular"
转换为0
:
<?php
echo (int) "female_singular"; //0
因此,当您没有在transchoice字符串中指定范围时,Translation
组件会根据字符串位置进行选择。
在你的情况下(number = 0
),它是字符串:"tu es venu 1 fois donc 1 vie"
。