symfony2中的双重翻译

时间:2012-06-27 11:48:23

标签: symfony translation twig

我尝试使用简单的验证器翻译。 我的档案:

validation.yml:

Some\UserBundle\Entity\Address:
    properties:
        name:
            - MaxLength:  {limit: 2, message: "some_user.max_length" }

和validators.pl.yml:

some_user:
    max_length: Wartość jest zbyt długa

在ajax加载的twig文件中,我有这个:

{{ form_error(form) }}

当我尝试我的验证器时,app会抛出这个:

An exception has been thrown during the rendering of a template ("Unable to choose a translation for "Wartość jest zbyt długa" with locale "pl".")

好像双翻译?有什么想法吗?

我找到了解决方法,在行动中:

$errorList = $this->get('validator')->validate($address);
$errors = "";
if (count($errorList) > 0) {
    foreach ($errorList as $err) {
        $errors.= $this->get('translator')
                    ->trans($err->getMessage(), array(), 'validators') . "\n";
    }

}

但我认为它的方式很糟糕。

好像在树枝上翻了两次......但为什么呢?

3 个答案:

答案 0 :(得分:3)

是“复数化”的问题

validators.pl.yml应如下所示:

Some\UserBundle\Entity\Address:
properties:
    name:
        - MaxLength:  {limit: 2, message: "some_user.max_length|some_user.max_length_s" }

但是现在,twig只渲染:

<ul><li>some_user.max_length_s</li></ul>

答案 1 :(得分:2)

我知道很久以前你问过这个问题但是我遇到了同样的问题,所以希望这对其他人有用:

您的 validators.pl.yml 应如下所示:

Some\UserBundle\Entity\Address:
properties:
    name:
        - MaxLength:  {limit: 2, message: "some_user.max_length" }

然后管理翻译的文件,例如 validators.pl.xliff 应该如下所示:

...

<trans-unit id="1">
    <source>some_user.max_length</source>
    <target>Your text|Your plural text</target>
</trans-unit>

...

现在可以正确渲染树枝中的结果。

答案 2 :(得分:1)

您应该查看PluralizationRules.php,了解如何为您的语言定义多元化。根据{{​​3}},您应该提供3个转换选项,而不是2.因为您提供了2并且需要数据,所以第三个引发了异常(InvalidArgumentException)。我发现异常消息有点误导:)