在Symfony的翻译组件中使用术语 - 尤其是验证消息

时间:2015-12-17 10:24:03

标签: symfony

我知道并了解如何在Symfony 2中翻译验证消息。

从官方文档中重复一遍:

// src/AppBundle/Entity/Author.php
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
     /**
      * @Assert\NotBlank(message = "author.name.not_blank")
      */
      public $name;
}

我会为它设置一个翻译文件/密钥,如:

 <!-- validators.en.xlf -->
 <?xml version="1.0"?>
 <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
     <file source-language="en" datatype="plaintext" original="file.ext">
         <body>
             <trans-unit id="1">
                 <source>author.name.not_blank</source>
                 <target>Please enter an author name.</target>
             </trans-unit>
         </body>
     </file>
</xliff>

这种方法非常好,但在我的情况下,我需要使用一些术语,例如在上面的示例中,对于“author”有一个单独的翻译,因为如果我的“作者”出现在许多验证消息中,我需要在不再是“作者”的情况下立即更改“作者”的每一次出现,例如'创建者'。

是否有任何改变,如:

 <target>Please enter an %author% name.</target>

使用其他翻译:

 <!-- validators.en.xlf -->
 <?xml version="1.0"?>
 <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
     <file source-language="en" datatype="plaintext" original="file.ext">
         <body>
             <trans-unit id="2">
                 <source>author</source>
                 <target>creator</target>
             </trans-unit>
         </body>
     </file>
</xliff>

1 个答案:

答案 0 :(得分:1)

这是一个坏主意IMO,因为当使用本身就是翻译的占位符时,编写翻译消息会更加困难。我可以给你一个简单的例子:只用法语翻译上面的消息。

  • Merci d'entrer un nom d'auteur
  • Merci d'entrer un nom de créateur

如您所见,将author重命名为creator不仅涉及更改此字词,还包括更改消息中的其他字词(仅考虑英文版本会导致此类错误,如英文在这方面要简单得多)。因此,如果您按照自己的建议操作,则无法使用大多数语言翻译您的应用。