Symfony 如何在transchoice()中使用标签
我需要根据性别和数量翻译一个法语短语。 在message.fr.yml中,我有:Symfony 如何在transchoice()中使用标签,symfony,machine-translation,Symfony,Machine Translation,我需要根据性别和数量翻译一个法语短语。 在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 %c
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的文档中看到
索引解决方案还可以包含标签(例如,一个:有一个苹果)
这纯粹是为了使翻译更清晰-它不影响功能
这两种方法也可以混合使用:
{0}没有苹果|一个:有一个苹果|更多:有%count%苹果
但是当我打电话给transchoice的时候
transchoice("key.toto", "female_singular", array(), "messages")
我有:
“这是我的人生”
而不是:
“TUES场馆1 fois donc 1 vie”
我更喜欢使用标签而不是{},因为消息文件是由另一个企业翻译的
有什么想法吗?来自
翻译组件:
这些标签实际上只是给翻译人员的提示,并不影响翻译
用于确定使用哪种复数形式的逻辑
及
由于标记是可选的,所以翻译器不使用它们(翻译器
将仅根据其在字符串中的位置获取字符串)
您可以确保是否打开了transChoice()
方法:
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
表示PHP
将的“女性单数”转换为0
:
<?php
echo (int) "female_singular"; //0
我认为你可以混合标签和转选:单数男性:你的静脉是一把钥匙。toto:“单数男性:单数男性%。”