翻译成分
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.6,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
翻译成分
Translation组件提供了国际化应用程序的工具。
安装
你可以用两种不同的方式安装组件:
- 通过Composer安装(
ob娱乐下载symfony /翻译
在Packagist); - 使用官方Git存储库(https://github.com/ob娱乐下载symfony/Translation).
然后,要求供应商/ autoload.php
文件以启用Composer提供的自动加载机制。否则,您的应用程序将无法找到这个Symfony组件的类。ob娱乐下载
构建翻译器
Translation组件的主要访问点是翻译.在使用它之前,您需要配置它并加载要翻译的消息(称为信息目录).
配置
的构造函数。翻译
类需要一个参数:区域设置。
1 2 3 4
使用ob娱乐下载\组件\翻译\翻译;使用ob娱乐下载\组件\翻译\MessageSelector;$翻译=新翻译(“fr_FR”,新MessageSelector ());
请注意
此处设置的语言环境是要使用的默认语言环境。在翻译字符串时,可以重写此区域设置。
请注意
这个词语言环境大致指用户的语言和国家。它可以是应用程序用来管理翻译和其他格式差异(例如货币格式)的任何字符串。的ISO 639 - 1语言代码,一个下划线(_
),然后ISO 3166-1 alpha-2国家代码(如。fr_FR
法语/法国)。
加载消息目录
类中的消息目录中存储消息翻译
类。消息目录类似于特定地区的翻译字典。
Translation组件使用Loader类来加载目录。您可以为同一地区加载多个资源,然后将这些资源组合到一个目录中。
该组件带有一些默认的加载器,您也可以创建自己的加载器。默认的加载器是:
- ArrayLoader-从PHP数组加载目录。
- CsvFileLoader-从CSV文件加载目录。
- IcuDatFileLoader-从资源包中加载目录。
- IcuResFileLoader-从资源包中加载目录。
- IniFileLoader-从ini文件加载目录。
- MoFileLoader-从gettext文件加载目录。
- PhpFileLoader-从PHP文件加载目录。
- PoFileLoader-从gettext文件加载目录。
- QtFileLoader-从QT XML文件加载目录。
- XliffFileLoader-从Xliff文件加载目录。
- JsonFileLoader-从JSON文件加载目录。
- YamlFileLoader-从Yaml文件加载目录(需要Yaml组件).
所有文件加载程序都要求配置组件.
你也可以创建自己的Loader,以防默认加载器之一不支持该格式。
方法中添加一个或多个加载器翻译
:
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”);
翻译过程
要真正翻译消息,Translator使用一个简单的过程:
- 类定义的翻译资源加载已翻译消息的目录
语言环境
(如。fr_FR
).来自翻译成分也会加载并添加到目录中(如果它们不存在的话)。最终的结果是一个庞大的翻译“字典”; - 如果消息位于目录中,则返回翻译。如果不是,翻译器将返回原始消息。
你通过呼叫开始这个过程反式()或transChoice ().然后,Translator在适当的消息目录中查找确切的字符串并返回它(如果它存在)。
回退地区
如果消息不在特定区域设置的目录中,翻译器将查找一个或多个备用区域设置的目录。例如,假设你要把它翻译成fr_FR
地区:
- 首先,翻译器在
fr_FR
语言环境; - 如果没有找到,翻译器将在
fr
语言环境; - 如果仍然没有找到翻译,则翻译器使用在翻译器上显式设置的一个或多个备用区域设置。
对于(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
$翻译->反式(“ob娱乐下载Symfony很棒”,数组(),“管理”);
ob娱乐下载Symfony现在将在管理
指定区域设置的域。