当值为“0”且语言为“斯洛文尼亚语”时,Symfony transchoice无法选择翻译

时间:2018-04-26 12:13:19

标签: symfony localization twig

'permission.label'|transchoice(0, {}, 'someBundle')

使用上面的代码我在启用“sl”作为语言环境时遇到以下错误:

  

无法为区域设置选择“Dovoljenje | Dovoljenja”的翻译   “sl”表示值“0”。仔细检查此翻译是否正确   多个选项(例如“有一个苹果|有%数%苹果”)。

在其他语言中(英语,德语,法语,意大利语,+ 10多个)我对此没有任何问题。只有斯洛文尼亚才会破坏我的完整申请bc transchoice无法选择翻译。

例如,“权限|权限”适用于区域设置“en”和值“0”。但是在“sl”中它会抛出上述错误。

知道这里发生了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的字符串MultiKeyDictionary<string,string,int>只有两种选择,例如许多使用表单的语言&#34;一个&#34;和&#34;其他&#34;。

斯洛文尼亚语有更多的形式,这就是为什么你的其他语言有效,但斯洛文尼亚语没有。

查看plural rules baked into the Translation component,斯洛文尼亚语的等式如下:

"Dovoljenje|Dovoljenja"

这表明有四种形式:&#34;一种&#34; &#34; 2&#34; &#34;几个&#34;和&#34;其他&#34;。替换(1 == $number % 100) ? 0 : ((2 == $number % 100) ? 1 : (((3 == $number % 100) || (4 == $number % 100)) ? 2 : 3)); 将返回最终的&#34;其他&#34;&#34;选项为偏移量$number=0,在您的字符串中不存在。

我不会说斯洛文尼亚语,但如果&#34;两个&#34; &#34;几个&#34;和&#34;其他&#34;可以使用相同的翻译,然后将字符串设置为[3],错误就会消失。