翻译组件
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.5,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
翻译组件
翻译组件提供国际化应用程序的工具。
安装
您可以安装组件在两个不同的方面:
- 安装它通过作曲家(
ob娱乐下载symfony /翻译
在Packagist); - 使用官方的Git存储库(https://github.com/ob娱乐下载symfony/Translation)。
构建翻译
的主要访问点翻译组件翻译。您可以使用它之前,您需要配置它,翻译(称为加载消息信息目录)。
配置
的构造函数翻译
类需要一个参数:语言环境。
1 2 3 4
使用ob娱乐下载\组件\翻译\翻译;使用ob娱乐下载\组件\翻译\MessageSelector;美元翻译=新翻译(“fr_FR”,新MessageSelector ());
请注意
这里的语言环境设置要使用的缺省语言环境。你可以覆盖这个地区当翻译字符串。
请注意
这个词语言环境大概是指用户的语言和国家。它可以是任何字符串,您的应用程序使用管理翻译和其他格式的差异(如货币格式)。的ISO 639 - 1语言代码,下划线(_
),那么ISO 3166 - 1α2国家代码(如。fr_FR
法国建议/法国)。
加载消息目录
内部的消息存储在消息目录翻译
类。消息目录就像字典翻译为一个特定的语言环境。
翻译组件使用类加载器加载目录。在同一地区,您可以加载多个资源将被合并到一个目录。
2.4
的JsonFileLoader
是在Symfony 2.4中引入的。ob娱乐下载
组件提供了一些默认的加载器,您可以创建自己的装载机。默认加载程序:
- ArrayLoader——加载目录从PHP数组。
- CsvFileLoader——从CSV文件加载目录。
- IcuDatFileLoader从资源包加载目录。
- IcuResFileLoader从资源包加载目录。
- IniFileLoader——从ini文件加载目录。
- MoFileLoader——从gettext加载目录文件。
- PhpFileLoader从PHP文件加载目录。
- PoFileLoader——从gettext加载目录文件。
- QtFileLoader——从QT XML文件加载目录。
- XliffFileLoader——从Xliff文件加载目录。
- JsonFileLoader——从JSON文件加载目录。
- YamlFileLoader——从Yaml文件(需要装载目录Yaml组件)。
所有的文件加载器要求配置组件。
你也可以创建自己的装载机,支持的格式不是已经默认加载器之一。
首先,你应该添加一个或更多的加载器翻译
:
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
地区:
- 首先,翻译找的翻译
fr_FR
语言环境; - 如果没有发现,译者寻找翻译的
fr
语言环境; - 如果翻译还没有发现,译者使用了一个或多个后备区域设置明确的翻译。
(3),可以通过调用设置回退的地方setFallbackLocale ():
1 2
/ /……美元翻译- >setFallbackLocale (数组(“en”));
使用消息域
如您所见,消息文件被组织成不同地区,他们的翻译。进一步消息文件也可以组织到“域”。
域的第四个参数指定addResource ()
方法。默认的域名是消息
。例如,假设,组织,翻译被分为三个不同的领域:消息
,管理
和导航
。法语翻译将加载这样的:
1 2 3 4 5 6 7 8 9 10 11
/ /……美元翻译- >addLoader (xliff的,新XliffLoader ());美元翻译- >addResource (xliff的,“messages.fr.xliff”,“fr_FR”);美元翻译- >addResource (xliff的,“admin.fr.xliff”,“fr_FR”,“管理”);美元翻译- >addResource (xliff的,“navigation.fr.xliff”,“fr_FR”,“导航”);
当翻译的字符串不是在默认域(消息
),您必须指定域的第三个参数反式()
:
1
美元翻译- >反式(Sob娱乐下载ymfony是伟大的,数组(),“管理”);
ob娱乐下载Symfony将寻找的信息管理
域的指定的场所。