什么是本地化
本地化(Localization)描述了翻译国际化插件的后续过程。本地化通常缩写为l10n
(因为l和n之间有10个字母。)
本地化文件
POT(便携式对象模板)文件
此文件包含插件中的原始字符串(英文)。
PO(便携对象)文件
每个翻译人员将获取POT
文件,并将msgstr
部分翻译成自己的语言。结果是一个PO
文件,其格式与POT
相同,但具有翻译和一些特定的header。每种语言有一个PO
文件。
MO(机器对象)文件
从每个翻译后的PO
文件生成MO
文件。这些是gettext函数实际使用的机器可读的二进制文件(它们不关心.POT
或.PO
文件),并且是PO
文件的“编译”版本。转换是使用msgfmt
命令行工具完成的。通常,一个应用程序可以使用多个大型逻辑可翻译模块和相应的不同MO
文件。文本域(text domain)是每个模块的句柄,它有一个不同的MO
文件。
生成POT文件
POT
文件是您需要交给翻译人员的文件,以便他们能够完成工作。POT
和PO
文件可以轻松地互换重命名,以更改文件类型,而不会出现问题。
有几种方法可以为插件生成POT
文件:
WP-CLI
安装WP-CLI,并根据文档使用wp i18n make-pot
命令。
Poedit
翻译时,也可以在本地使用Poedit。这是所有主要操作系统的开源工具。免费Poedit默认版本支持使用Gettext函数手动扫描所有源代码。它的pro版本还具有对WordPress插件的一键扫描功能。生成PO
文件后,可以将该文件重命名为POT
。如果生成了MO
,则可以删除该文件,因为它不需要。如果您没有pro版本,您可以轻松获得空白POT,并将其用作POT
文件的基础。将空白POT
放入languages文件夹后,可以单击Poedit中的“Update”以使用字符串更新POT
文件。
Grunt任务
您甚至可以使用一些繁重的任务来创建POT,grunt-wp-i18n & grunt-pot。设置grunt的步骤超出了本文档的范围,但请注意这是可能的。这里是一个示例Grunt.js和package.json,您可以将其放置在插件的根目录中。
翻译PO文件
将翻译后的文件另存为my-plugin-{locale}.mo
。locale是语言代码或国家代码。例如,德语的locale是de_DE
。从上面的代码示例来看,文本域是“my-plugin”,因此德语MO和PO文件应命名为my-plugin-de_DE.mo
和my-plugin-de_DE.po
。有关语言和国家代码的更多信息,请参阅用您的语言安装WordPress。
翻译PO
文件有多种方法。
手动
您可以使用文本编辑器输入译文。在文本编辑器中,它将如下所示。
#: plugin-name.php:123 msgid "Page Title" msgstr ""
输入引号之间的翻译。对于德语翻译,它看起来是这样的。
#: plugin-name.php:123 msgid "Page Title" msgstr "Seitentitel"
Poedit
翻译时也可以使用Poedit。免费Poedit默认版本支持使用Gettext函数手动扫描所有源代码。它的pro版本还具有对WordPress插件和主题的一键扫描功能。
在线服务
第三种选择是使用在线翻译服务。一般的想法是,你上传POT
文件,然后你可以给用户或翻译人员权限来翻译你的插件。这允许您跟踪更改,始终具有最新的翻译,并减少二次翻译。
以下是可用于在线翻译PO文件的几个工具:
生成MO文件
命令行
msgfmt
用于创建MO文件。msgfmt
是Gettext包的一部分。否则可以使用命令行。典型的msgfmt
命令如下所示:
Unix操作系统
msgfmt -o filename.mo filename.po
Windows操作系统
msgfmt -o filename.mo filename.po
如果你有很多PO
要立即转换的文件,可以将其作为批处理运行。例如,使用bash
命令:
Unix操作系统
# Find PO files, process each with msgfmt and rename the result to MO for file in `find . -name "*.po"` ; do msgfmt -o ${file/.po/.mo} $file ; done
Windows操作系统
对于Windows,您首先需要安装Cygwin。
创建一个名为potomo.sh
的文件,并将以下内容放入其中:
#! /bin/sh # Find PO files, process each with msgfmt and rename the result to MO for file in `/usr/bin/find . -name '*.po'` ; do /usr/bin/msgfmt -o ${file/.po/.mo} $file ; done
可以在命令行中运行此命令。
cd C:/path/to/language/folder/my-plugin/languages & C:/cygwin/bin/bash -c /cygdrive/c/path/to/script/directory/potomo.sh
Poedit
msgfmt
也集成在Poedit中,允许您使用它生成MO文件。首选项中有一个设置,您可以在其中启用或禁用它。

Grunt任务
使用grunt-po2mo将转换所有文件。
翻译技巧
不要逐字翻译,要有机地翻译
作为双语或多语者,你无疑知道你所说的语言有不同的结构、节奏、音调和屈折变化。翻译后的信息不需要与英语信息的结构相同:接受呈现的想法,并提出一条信息,以自然的方式为目标语言表达相同的内容。这就是创建一个相同的消息和一个相同消息之间的区别:不要复制,替换。即使消息中有更多的结构化项目,如果您觉得它对您的目标受众更符合逻辑或更好地适应,您也可以进行创造性的调整和更改。
尽量保持相同程度的正式(或非正式)
每条信息都有不同程度的正式或非正式。你必须自己(或与你的团队一起)弄清楚目标语言中每条消息的正式或非正式程度,但WordPress消息(尤其是信息性消息)在英语中往往具有礼貌的非正式语气。在你的文化背景下,试着在目标语言中实现对等。
不要使用俚语或受众专用术语
博客中可能会出现一些术语,但不要使用只有“内行”人群才会理解的俗语。如果没有经验的博主要用你的语言安装WordPress,他们会知道这个词的意思吗?像pingback、trackback和feed这样的词是这条规则的例外;这些术语通常很难翻译,许多翻译人员选择直接用英语。
阅读其他软件在您语言中的本地化
如果你陷入困境或需要指导,请尝试阅读其他流行软件工具的翻译,以了解常用的术语、如何处理形式等。当然,WordPress有自己的语调和感觉,因此在阅读其他本地化时请记住这一点,但是,请随意挖掘UI术语等,以保持与您语言中其他软件的一致性。
使用本地化
将本地化文件放在language文件夹中,要么放在插件languages
文件夹中,或者从WordPress 3.7开始放在插件languages
文件夹下,通常放在wp-content
下。完整路径将为wp-content/languages/plugins/my-plugin-fr_FR.mo
。
您可以在“常规设置”中更改语言。如果您没有看到此选项,或者没有列出要切换到的语言,请手动执行此操作:
- 将
wp-config.php
中的WPLANG
定义为所选语言。例如,如果你想使用法语,你必须:define ('WPLANG', 'fr_FR');
- 转到
wp-admin/options-general.php
或“设置” -> “常规” - 在“站点语言”下拉列表中选择您的语言
- 转到
wp-admin/update-core.php
- 如果可用,请单击“更新翻译”
- 核心翻译文件在可用时下载
资源
- Creating .pot file for your theme or plugin
- How To Internationalize WordPress Plugins
- Translating Your Theme
- Blank WordPress POT
- Improved i18n WordPress tools
- How to update translations quickly
- Workflow between GitHub/Transifex
- Gist: Complete Localization Grunt task
- WordPress.tv tags: i18n, internationalization and translation