-->

Symfony2的复数翻译特定规则(当数在具体的数字结束)(Symfony2 plural tran

2019-10-17 22:52发布

我试着翻译结果数到立陶宛也有一些特定的规则。 我会试着解释它们:

  • 所有零(0,10,20 ... 1050,1060 ......)和12月19日(含)之间及结束计数(12 ... 19)
  • 所有计数与一个结束,除了与11结束(1,21,31 ... 1221,1231 ......但不是11,111,211 ... 2311,2411)
  • 所有其他上述(2 ... 9包容性和超过21到上述规则不适用)未上市

我想这样的事情(使用YAML),但偶数40不符合规则:

'%count% Results, ': '{0,*0}%count% rezultatų |{1,*1}%count% rezultatas |]1,10[%count% rezultatai |]10,20[%count% rezultatų '

它甚至有可能做这样的事情,使用YAML? 通过以上的例子中,我得到:

一个例外模板( “无法选择翻译” 的渲染过程中被抛出{0,* 0}%计%rezultatų| {1,* 1}%计%rezultatas |] 1,10 [%计% rezultatai |] 10,20 [%计%rezultatų“与区域‘LT’仔细检查,这个翻译有正确的多个选项(例如,‘有一个苹果|有%计%苹果’)。”)

Answer 1:

Symfony2中的转换器只支持ISO 31-11符号 。 该格式不具有* wildchart您使用。 你所要做的是不可能的Symfony2在TE的时刻。

但是,你可以扩展的Symfony的翻译和添加此功能。 你可以做到这一点通过重写Symfony\Component\Translation\MessageSelector类,添加功能,然后更改服务参数translator.selector.class你的类名。 例如:

// src/Acme/TranslationExtraBundle/Translation/MessageSelector.php
namespace Acme\TranslationExtraBundle\Translation;

use Symfony\Component\Translation\MessageSelector as BaseMessageSelector;

class MessageSelector extends BaseMessageSelector
{
    public function choose($message, $number, $locale)
    {
        // ... your special logic

        return parent::choose($message, $number, $locale);
    }
}
parameters:
    translator.selector.class: Acme\TranslationExtraBundle\Translation\MessageSelector


Answer 2:

所以我试图解决以下沃特斯回答我的问题,并发现存在Symfony\Component\Translation\PluralizationRules和立陶宛已经存在。 所有我需要做的是从我的翻译线取下的间隔和它的作品像现在的预期。

'%count% Results, ': '%count% rezultatas |%count% rezultatai |%count% rezultatų '


文章来源: Symfony2 plural translation with specific rules (when number ends in specific digit)