1

我正在尝试将结果计数翻译为立陶宛语,并且有一些特定的规则。我将尝试解释它们:

  • 所有计数都以零结尾(0、10、20 ... 1050、1060...)并且介于 12 和 19 之间(包括 12...19)
  • 所有计数都以 1 结尾,除了以 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}%count% rezultatų |{1,*1}%count% rezultatas |]1,10[%count% rezultatai |]10,20[%count% rezultatų " 区域设置为 "lt"。仔细检查这个翻译是否有正确的复数选项(例如,“有一个苹果|有 %count% 个苹果”)。

4

2 回答 2

4

Symfony2 的 Translator 仅支持ISO 31-11 表示法。该格式没有*您正在使用的通配图。Symfony2 目前无法实现您想要做的事情。

但是,您可以扩展 Symfony 的 Translator 并添加此功能。您可以通过覆盖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
于 2013-04-04T11:26:00.743 回答
3

因此,我试图在 Wouters 回答之后解决我的问题,并发现存在Symfony\Component\Translation\PluralizationRules并且立陶宛语已经存在。我所要做的就是从我的翻译行中删除间隔,它现在可以按预期工作。

'%count% Results, ': '%count% rezultatas |%count% rezultatai |%count% rezultatų '
于 2013-04-05T13:16:38.813 回答