翻译
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
翻译
“国际化”这个词(通常缩写i18n)是指抽象成字符串的过程和其他应用程序的特定部分为一层,在那里他们可以被翻译和转换根据用户的语言环境(即语言和国家)。对于文本,这意味着包装每一个函数能够翻译文本(或“消息”)为用户的语言:
1 2 3 4 5 6
/ /文本将* *总是用英文打印回声“Hello World”;/ /文本可以转化为最终用户的语言或/ /默认为英文回声美元翻译- >反式(“Hello World”);
请注意
这个词语言环境大概是指用户的语言和国家。它可以是任何字符串,您的应用程序使用管理翻译和其他格式的差异(如货币格式)。的ISO 639 - 1语言代码,下划线(_
),那么ISO 3166 - 1α2国家代码(如。fr_FR
法国建议/法国)。
翻译过程有几个步骤:
- 启用和配置ob娱乐下载Symfony的翻译服务;
- (即抽象的字符串。“消息”),在调用包装它们
翻译
(“翻译”); - 创建翻译资源/文件每种受支持的语言环境,将每个消息的应用程序;
- 确定,设置和管理用户的语言环境请求和选择在用户的整个会话。
配置
前面的命令创建一个初始配置文件,您可以定义应用程序的缺省语言环境和翻译文件所在的目录:
- YAML
- XML
- PHP
1 2 3 4 5
#配置/包/ translation.yaml框架:default_locale:“en”翻译:default_path:' % kernel.project_dir % /翻译'
翻译中所使用的语言环境是一个存储在请求。这通常是通过设置_locale
在你的路线(见属性如何处理用户的语言环境)。
基本的翻译
翻译文本是通过的翻译
服务(翻译)。翻译的文本块(称为消息),用反式()方法。例如,假设你翻译一个简单的消息从一个控制器:
1 2 3 4 5 6 7 8 9
/ /……使用ob娱乐下载\合同\翻译\TranslatorInterface;公共函数指数(TranslatorInterface美元翻译){美元翻译=美元翻译- >反式(Sob娱乐下载ymfony是伟大的);/ /……}
执行这段代码时,Symfony将尝试翻译消息基于“Symob娱乐下载fony是伟大的”语言环境
的用户。为此,您需要告诉Symfony如何翻译消息通过“翻译资源”,这通常是一ob娱乐下载个文件,它包含一组翻译对于一个给定的语言环境。这种“字典”的翻译可以在几种不同的格式:
- YAML
- XML
- PHP
1 2
#翻译/ messages.fr.yamlob娱乐下载Symfony是伟大的:我ob娱乐下载
这些文件应该安装在哪里的信息,明白了翻译。
现在,如果用户的语言环境是法国人的语言(如。fr_FR
或fr_BE
),消息将被翻译成我Symfonob娱乐下载y
。你也可以翻译你的消息模板。
使用真实的或关键字信息
这个例子演示了两个不同的哲学在创建消息翻译:
1 2 3
美元翻译- >反式(Sob娱乐下载ymfony是伟大的);美元翻译- >反式(“ob娱乐下载symfony.great”);
在第一种方法,信息都写在缺省语言环境的语言(英语)。这一信息被用作“id”在创建翻译。
在第二个方法中,消息实际上是“关键词”,传达消息的想法。然后使用关键字信息的“id”任何翻译。在这种情况下,翻译必须为默认语言环境(即翻译ob娱乐下载symfony.great
来ob娱乐下载Symfony是伟大的
)。
第二种方法是方便的,因为消息键不会在每个翻译文件需要更改,如果你决定消息应该读“Symfony是真正伟大的”在默认语言环境。ob娱乐下载
使用哪个方法的选择完全取决于你,但是“关键字”格式通常是建议多语言应用程序,而对于共享包包含翻译资源我们建议真正的消息,那么您的应用程序可以选择禁用翻译层,你将看到一个可读的信息。
此外,php
和yaml
文件格式支持嵌套的id,以避免重复自己,如果你使用关键字,而不是真正为您的id文本:
- YAML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12
ob娱乐下载symfony:是:# id是symob娱乐下载fony.is.great大:ob娱乐下载是伟大的# id是symob娱乐下载fony.is.amazing惊人的:ob娱乐下载是令人惊异的有:# id是symob娱乐下载fony.has.bundles包:ob娱乐下载有包用户:# id是user.login登录:登录
消息格式
有时,一个消息包含一个变量需要翻译:
1 2
/ /……美元翻译=美元翻译- >反式(“你好”。美元的名字);
然而,这个字符串创建一个翻译是不可能的因为翻译将尝试查找消息包括可变部分(如“你好瑞恩”或“你好,法比安”)。
另一个问题是当你有可能是也可能不是复数翻译,基于一些变量:
1 2
有一个苹果。有5个苹果。
来管理这些情况下,Symfony遵循ob娱乐下载ICU MessageFormat通过使用PHP的语法messageformat类。阅读更多关于这个如何使用ICU MessageFormat翻译消息。
翻译的模板
大多数时候,翻译出现在模板。ob娱乐下载Symfony提供本机支持树枝和PHP模板:
1
<h1>{%反式%}ob娱乐下载Symfony是伟大的!{%endtrans%}< /h1>
读在模板中使用的翻译更多信息关于翻译的树枝标签和过滤器。
迫使译者语言环境
翻译一个消息时,译者使用指定的区域或回退
现场如果有必要。你也可以手动指定地区用于翻译:
1 2 3 4 5 6
美元翻译- >反式(Sob娱乐下载ymfony是伟大的[],“消息”,“fr_FR”);
自动提取翻译内容和更新目录
最耗时的任务当翻译应用程序提取所有的模板内容要翻译和保持所有的翻译文件同步。ob娱乐下载Symfony包括一个命令翻译:更新
可以帮助你与这些任务:
1 2 3 4 5 6 7 8
#显示所有的消息应该翻译为法语美元php bin /控制台翻译:更新——将消息转储fr#更新法语翻译文件丢失的字符串的语言环境美元php bin /控制台翻译:更新——迫使fr#查看命令帮助看到其选项(前缀、输出格式、域、排序等)美元php bin /控制台翻译:更新—帮助
的翻译:更新
命令寻找失踪的翻译:
- 模板存储在
模板/
目录(或任何其他目录中定义的twig.default_path和twig.paths配置选项); - 注入或任何PHP文件/类自动装配的
翻译
服务和调用反式()
函数。
翻译资源/文件名称和位置
ob娱乐下载Symfony查找消息文件(即翻译)在接下来的默认位置:
- 的
翻译/
在项目的根目录(); - 的
资源/翻译/
目录里面的包。
这里列出的位置是最高的优先级。也就是说,您可以重写翻译消息包的第一个目录。
覆盖机制的关键水准:只有覆盖键需要列在一个更高的优先级消息文件。当一个关键消息文件中没有找到,译者会自动退回到低优先级消息文件。
翻译文件的文件名也很重要:每个消息文件必须命名根据以下路径:domain.locale.loader
:
- 域:一个可选的方法来组织信息分成组。除非应用程序的部分是明确分开,建议只使用默认值
消息
域; - 语言环境:翻译的语言环境(如
en_GB
,在
等); - 加载程序:Symfoob娱乐下载ny如何加载和解析文件(如。
xlf
,php
,yaml
等等)。
装载机可以任何注册加载程序的名称。默认情况下,Symfonob娱乐下载y提供了许多装入器:
.yaml
:YAML文件.xlf
:XLIFF文件;. php
:返回一个PHP数组;. csv
:CSV文件;. json
:JSON文件;. ini
:INI文件;.dat
,r
:ICU资源包;mo
:Machine对象的格式;.po
:可移植对象格式;.qt
:QT XML文件翻译;
使用哪个装载机的选择完全取决于你,是一种品味。推荐的选择是使用YAML对于简单的项目,如果你使用XLIFF生成翻译与专业项目或团队。
谨慎
每次你创建一个新消息目录(或安装一个包,其中包括翻译目录),一定要清楚你的缓存,这样Symfony会发现新的翻译资源:ob娱乐下载
1
美元php bin /控制台缓存:清楚
请注意
您可以添加其他目录路径配置选项:
- YAML
- XML
- PHP
1 2 3 4 5
#配置/包/ translation.yaml框架:翻译:道路:- - - - - -' % kernel.project_dir % /定制/道路/ /翻译'
请注意
你也可以翻译存储在一个数据库,或任何其他存储通过提供一个自定义类实现LoaderInterface接口。看到内置Symfonyob娱乐下载服务标签标签的更多信息。
处理用户的语言环境
翻译会根据用户的语言环境。读如何处理用户的语言环境了解更多关于如何处理它。
回退翻译的地方
想象一下,用户的区域设置es_AR
那你翻译的关键ob娱乐下载Symfony是伟大的
。寻找西班牙语翻译,Symfony会检查翻译资源几个地区:ob娱乐下载
- 首先,Symfob娱乐下载ony查找翻译的
es_AR
(阿根廷西班牙语)翻译资源(如。messages.es_AR.yaml
); - 如果不是发现,Symfony寻找翻译在父ob娱乐下载的语言环境,这是自动定义只对一些地区。在这个例子中,父区域设置
es_419
(拉丁美洲西班牙语); - 如果没有发现,Symfony查找翻译的ob娱乐下载
西文
(西班牙语)资源(如翻译。messages.es.yaml
); 如果翻译还没有发现,Symfony使用ob娱乐下载
回退
选项,该选项可以配置如下:- YAML
- XML
- PHP
1 2 3 4 5
#配置/包/ translation.yaml框架:翻译:回退:(“en”)#……
请注意
当Symfob娱乐下载ony不能找到一个翻译在给定的区域,它将缺失的翻译添加到日志文件中。有关详细信息,请参见框架配置引用(FrameworkBundle)。
调试翻译
当你有许多工作在不同语言翻译消息,很难跟踪哪些翻译是失踪,哪些不习惯了。读如何找到丢失或未使用的翻译消息吗找出如何识别这些消息。