如何在transchoice()中使用标签

时间:2015-03-06 10:55:22

标签: 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 %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”

我更喜欢使用标签而不是{},因为消息文件是由另一家企业翻译的。

有什么想法吗?

1 个答案:

答案 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。

ManualPHP"female_singular"转换为0

<?php

echo (int) "female_singular"; //0

因此,当您没有在transchoice字符串中指定范围时,Translation组件会根据字符串位置进行选择。

在你的情况下(number = 0),它是字符串:"tu es venu 1 fois donc 1 vie"