翻译组件

编辑该页面

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

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

翻译组件

翻译组件提供国际化应用程序的工具。

安装

您可以安装组件在两个不同的方面:

然后,需要供应商/ autoload.php文件,使作曲家提供的半自动的机制。否则,您的应用程序无法找到这个Symfony组件的类。欧宝娱乐app下载地址

构建翻译

的主要访问点翻译组件翻译。您可以使用它之前,您需要配置它,翻译(称为加载消息信息目录)。

配置

的构造函数翻译类需要一个参数:语言环境。

1 2 3 4
使用欧宝娱乐app下载地址\组件\翻译\翻译;使用欧宝娱乐app下载地址\组件\翻译\MessageSelector;美元翻译=翻译(“fr_FR”,MessageSelector ());

请注意

这里的语言环境设置要使用的缺省语言环境。你可以覆盖这个地区当翻译字符串。

请注意

这个词语言环境大概是指用户的语言和国家。它可以是任何字符串,您的应用程序使用管理翻译和其他格式的差异(如货币格式)。的ISO 639 - 1语言代码,下划线(_),那么ISO 3166 - 1α2国家代码(如。fr_FR法国建议/法国)。

加载消息目录

内部的消息存储在消息目录翻译类。消息目录就像字典翻译为一个特定的语言环境。

翻译组件使用类加载器加载目录。在同一地区,您可以加载多个资源将被合并到一个目录。

组件提供了一些默认的加载器,您可以创建自己的装载机。默认加载程序:

所有的文件加载器要求配置组件

你也可以创建自己的装载机,支持的格式不是已经默认加载器之一。

首先,你应该添加一个或更多的加载器翻译:

1 2
/ /……美元翻译- >addLoader (“数组”,ArrayLoader ());

第一个参数是装载机的名字,您可以参考翻译,第二个参数是加载器本身的一个实例。在此之后,您可以添加您的资源使用正确的加载程序。

加载消息ArrayLoader

加载消息可以通过调用完成addResource ()。第一个参数是装载机的名字(这是第一个参数addLoader ()方法),第二个是资源,第三个参数是语言环境:

1 2 3 4
/ /……美元翻译- >addResource (“数组”,数组(“Hello World !”= >“你好”),“fr_FR”);

与文件加载器加载信息

如果你使用一个文件的加载器,你也应该使用addResource ()方法。唯一的区别是,你应该把资源文件的文件名作为第二个参数,而不是数组:

1 2 3
/ /……美元翻译- >addLoader (yaml的,YamlFileLoader ());美元翻译- >addResource (yaml的,“路径/ / messages.fr.yml”,“fr_FR”);

翻译过程

翻译的信息,译者使用一个简单的流程:

  • 加载目录翻译消息从翻译资源的定义语言环境(如。fr_FR)。的消息翻译组件也加载并添加到目录,如果他们不存在。最终的结果是一个大型的“词典”翻译;
  • 如果消息位于目录,返回翻译。如果没有,翻译返回原始消息。

你开始这个过程通过调用反式()transChoice ()。然后,译者寻找适当的消息目录内的精确字符串并返回(如果它存在的话)。

回退地区

如果消息不是位于目录的具体语言环境,译者将一个或多个目录的回退场所。例如,假设你想翻译成fr_FR地区:

  1. 首先,翻译找的翻译fr_FR语言环境;
  2. 如果没有发现,译者寻找翻译的fr语言环境;
  3. 如果翻译还没有发现,译者使用了一个或多个后备区域设置明确的翻译。

(3),可以通过调用设置回退的地方setFallbackLocales ():

1 2
/ /……美元翻译- >setFallbackLocales (数组(“en”));

使用消息域

如您所见,消息文件被组织成不同地区,他们的翻译。进一步消息文件也可以组织到“域”。

域的第四个参数指定addResource ()方法。默认的域名是消息。例如,假设,组织,翻译被分为三个不同的领域:消息,管理导航。法语翻译将加载这样的:

1 2 3 4 5 6 7 8 9 10 11
/ /……美元翻译- >addLoader (“xlf”,XliffFileLoader ());美元翻译- >addResource (“xlf”,“messages.fr.xlf”,“fr_FR”);美元翻译- >addResource (“xlf”,“admin.fr.xlf”,“fr_FR”,“管理”);美元翻译- >addResource (“xlf”,“navigation.fr.xlf”,“fr_FR”,“导航”);

当翻译的字符串不是在默认域(消息),您必须指定域的第三个参数反式():

1
美元翻译- >反式(S欧宝娱乐app下载地址ymfony是伟大的,数组(),“管理”);

欧宝娱乐app下载地址Symfony将寻找的信息管理域的指定的场所。

使用

阅读如何使用翻译组件使用翻译

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。