使用翻译

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.2,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

使用翻译

想象你想翻译的字符串“欧宝娱乐app下载地址Symfony是伟大的”法国:

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址\组件\翻译\加载程序\ArrayLoader;使用欧宝娱乐app下载地址\组件\翻译\翻译;美元翻译=翻译(“fr_FR”);美元翻译- >addLoader (“数组”,ArrayLoader ());美元翻译- >addResource (“数组”,(“欧宝娱乐app下载地址Symfony是伟大的!”= >“欧宝娱乐app下载地址Symfony est超级!”),“fr_FR”);var_dump (美元翻译- >反式(“欧宝娱乐app下载地址Symfony是伟大的!”));

在这个示例中,消息“欧宝娱乐app下载地址Symfony是伟大的!”将翻译成语言环境设置在构造函数中(fr_FR)如果消息的信息存在于一个目录。

创建翻译

创建翻译文件的行为是一个重要的部分(通常缩写为“本地化”L10n)。翻译文件包含一系列id-translation对给定域和语言环境。源标识符的个人翻译,并可以在主要地区(如消息。“欧宝娱乐app下载地址Symfony是伟大的”)您的应用程序或一个惟一的标识符(例如欧宝娱乐app下载地址symfony.great下面,请参阅侧栏)。

翻译文件可以创建几个格式,XLIFF被推荐的格式。这些文件被解析类装入器之一。

  • XML
  • YAML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
< ?xml version = " 1.0 " ? ><xliff版本=“1.2”xmlns=“urn: oasis:名称:tc: xliff文档:1.2”><文件通过读=“en”数据类型=“明文”原始=“file.ext”><身体><trans-unitid=“欧宝娱乐app下载地址symfony_is_great”><>欧宝娱乐app下载地址Symfony是伟大的< /><目标>我Symfon欧宝娱乐app下载地址y< /目标>< /trans-unit><trans-unitid=“欧宝娱乐app下载地址symfony.great”><>欧宝娱乐app下载地址symfony.great< /><目标>我Symfon欧宝娱乐app下载地址y< /目标>< /trans-unit>< /身体>< /文件>< /xliff>

这个例子演示了两个不同的哲学在创建消息翻译:

1 2 3
美元翻译- >反式(S欧宝娱乐app下载地址ymfony是伟大的);美元翻译- >反式(“欧宝娱乐app下载地址symfony.great”);

在第一种方法,信息都写在缺省语言环境的语言(英语)。这一信息被用作“id”在创建翻译。

在第二个方法中,消息实际上是“关键词”,传达消息的想法。然后使用关键字信息的“id”任何翻译。在这种情况下,翻译必须为默认语言环境(即翻译欧宝娱乐app下载地址symfony.great欧宝娱乐app下载地址Symfony是伟大的)。

第二种方法是方便的,因为消息键不会在每个翻译文件需要更改,如果你决定消息应该读“Symfony是真正伟大的”在默认语言环境。欧宝娱乐app下载地址

使用哪个方法的选择完全取决于你,但经常被推荐的“关键字”格式。

此外,phpyaml文件格式支持嵌套的id,以避免重复自己,如果你使用关键字,而不是真正为您的id文本:

  • YAML
  • PHP
1 2 3 4 5 6 7 8
欧宝娱乐app下载地址symfony:是:大:欧宝娱乐app下载地址伟大的惊人的:欧宝娱乐app下载地址令人惊异的有:包:欧宝娱乐app下载地址用户:登录:登录

多个层面被夷为平地到单独的id /翻译对通过添加一个点(各个层面之间),因此上面的示例是等价的:

  • YAML
  • PHP
1 2 3 4
欧宝娱乐app下载地址symfony.is.great:欧宝娱乐app下载地址伟大的欧宝娱乐app下载地址symfony.is.amazing:欧宝娱乐app下载地址令人惊异的欧宝娱乐app下载地址symfony.has.bundles:欧宝娱乐app下载地址user.login:登录

迫使译者语言环境

翻译一个消息时,译者使用指定的区域或回退现场如果有必要。你也可以手动指定地区用于翻译:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
美元翻译- >反式(S欧宝娱乐app下载地址ymfony是伟大的[],“消息”,“fr_FR”);美元翻译- >transChoice (“{0}没有苹果|{1}有一个苹果|)1,正[有%数%苹果',10[],“消息”,“fr_FR”);

请注意

从3.2 Symfony开始欧宝娱乐app下载地址,第三个参数transChoice ()是可选的唯一使用占位符是什么时候%数%。在以前的Symfony版欧宝娱乐app下载地址本你需要总是定义:

1 2 3 4 5 6 7
美元翻译- >transChoice (“{0}没有苹果|{1}有一个苹果|)1,正[有%数%苹果',10,(“%数%”= >10),“消息”,“fr_FR”);

检索信息目录

如果您想使用相同的翻译目录以外的应用程序(例如,使用翻译在客户端),可以获取原始翻译信息。指定所需的语言环境:

1 2 3 4 5
美元目录=美元翻译- >getCatalogue (“fr_FR”);美元消息=美元目录- >所有();(美元目录=美元目录- >getFallbackCatalogue ()) {美元消息= array_replace_recursive (美元目录- >所有(),美元消息);}

美元的消息变量将有以下结构:

1 2 3 4 5 6 7 8 9
(“消息”= > [“Hello world”= >“你好,兜售《世界报》”),“验证”= > [“价值不应该是空的= >“不doit的数值可能见的,“价值太长”= >”的美国东部时间太长”]];

添加笔记翻译内容

有时译者需要额外的上下文来决定如何更好地翻译一些内容。这个上下文可以提供笔记,评论的集合用于存储终端用户可读信息。唯一的格式,它支持加载和倾销notes是XLIFF 2.0版。

如果2.0 XLIFF文档包含<笔记>节点,它们被自动加载/倾倒在使用该组件在一个Symfony应用程序:欧宝娱乐app下载地址

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><xliffxmlns=“urn: oasis:名称:tc: xliff文档:2.0”版本=“2.0”srcLang=“- fr”trgLang=“en - us”><文件id=“messages.en_US”><单位id=“LCa0a2j”的名字=“原创内容”><笔记><请注意类别=“状态”>< /请注意><请注意类别=“批准”>真正的< /请注意><请注意类别=“节”优先级=“1”>用户登录< /请注意>< /笔记><><>原创内容< /><目标>翻译的文章内容< /目标>< />< /单位>< /文件>< /xliff>

使用独立的翻译组件时,调用setMetadata ()目录的方法并通过notes作为数组。这是例如所需的代码生成之前的XLIFF文件:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用欧宝娱乐app下载地址\组件\翻译\自动倾卸车\XliffFileDumper;使用欧宝娱乐app下载地址\组件\翻译\MessageCatalogue;美元目录=MessageCatalogue (“en_US”);美元目录- >添加([“原创内容”= >“翻译的文章内容”]);美元目录- >setMetadata (“原创内容”,(“笔记”= > [[“类别”= >“状态”,“内容”= >“新”]、[“类别”= >“批准”,“内容”= >“真正的”]、[“类别”= >“节”,“内容”= >“用户登录”,“优先”= >' 1 ']]]);美元自动倾卸车=XliffFileDumper ();美元自动倾卸车- >formatCatalogue (美元目录,“消息”,(“default_locale”= >“fr_FR”,“xliff_version”= >“2.0”]);
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。