我尝试使用简单的验证器翻译。 我的档案:
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";
}
}
但我认为它的方式很糟糕。
好像在树枝上翻了两次......但为什么呢?
答案 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
)。我发现异常消息有点误导:)