国际化

3.4 版本
维护中的版本

国际化(internationalization)和本地化(localization)都是为了令程序及其内容适合于用户的不同区域或语言。在Symfony中,这是个可选功能,需要你预先开启。只需去除下例中的translator配置选项的注释,并设置你程序的locale即可:

1
2
3
4
5
6
7
8
9
# app/config/config.yml
framework:
    # ...
    translator: { fallbacks: ['%locale%'] }
 
# app/config/parameters.yml
parameters:
    # ...
    locale:     en

翻译源的文件格式 

Symfony翻译组件支持多种翻译格式:PHP、Qt、.po.mo、JSON、CSV、INI,等等。

Best Practice

Best Practice

使用XLIFF格式的翻译文件。

所有可利用的翻译格式中,唯有XLIFF和gettext受到专业translator的广泛支持。由于是基于XML,你在书写时还可以验证XLIFF文件的内容。

Symfony支持在XLIFF文件中进行注释,令translator对用户更加友好。最好,好的翻译不外乎就是上下文语境,而这些XLIFF注释,令你能够定义那些上下文。

Tip

采用了Apache授权的JMSTranslationBundle给了你一个web界面来查看和编辑这些翻译文件。它还有高级的提取器,可以读取你的项目并自动更新XLIFF文件。

翻译源的文件位置 

Best Practice

Best Practice

将翻译文件存在app/Resources/translations/目录中。

传统上,Symfony开发者们会在每个bundle的Resources/translations/目录下创建这些文件。但由于app/Resources/目录是程序级资源的全局首选位置,把翻译文件存入app/Resources/translations/能够中心化它们,令其优先级高过其他翻译文件。这让你能够覆写定义在三方bundles中的翻译信息。

翻译的键 

Best Practice

Best Practice

永远使用键来翻译,而不是用内容字符串。

使用键(keys)来简化对翻译文件的管理,因为你可以在改变其原始内容时不必更新所有的翻译文件。

键应该描述其目的而不是 其位置。比如,如果一个表单字段的label是Username,则一个完美的翻译键应该写作 label.username,而不是edit_form.label.username

翻译源文件样例 

应用前面所有的最佳实践,程序的英文版翻译文件例程是下面这样的:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- app/Resources/translations/messages.en.xlf -->
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="en" target-language="en" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="title_post_list">
                <source>title.post_list</source>
                <target>Post List</target>
            </trans-unit>
        </body>
    </file>
</xliff>

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)