
要想让WordPress的主题和插件支持多种语言,首先得弄清楚什么是国际化和本地化,以及WordPress是如何实现这些的。
这一篇文章会聊到以下几个方面:
国际化到底是什么?
如何给你的插件国际化
本地化是什么呢?
本地化文件的介绍
怎样实现本地化
po翻译文件解析
如何在WordPress中翻译JavaScript内容
安装WP-CLI的步骤
在Windows上如何安装wp-cli
如何更新WP-CLI
通过WP-CLI生成JSON翻译文件
使用WP-CLI生成POT翻译模板
什么是国际化?
国际化就是为软件(比如说WordPress)添加多语言支持的过程。一般来说,我们把国际化缩写为 i18n,其中的18代表字母“i”和“n”之间的字母数。
如果你的插件和主题都支持i18n,就能让更多的人来使用它,即使你不需要自己去翻译成多种语言。当你把软件上传到WordPress.org后,所有的JS和PHP文件都会被自动处理。系统会识别出翻译字符串,并把它们加入到translate.wordpress.org,方便社区进行翻译,确保WordPress插件和主题能够用尽可能多的语言提供服务。
对于PHP,WordPress有一套成熟的流程,你可以查看一下如何国际化你的插件。而WordPress 5.0则引入了类似的JavaScript翻译流程。
如何国际化你的插件
要使字符串可以被翻译,你得把原始字符串放到一组特殊函数的调用中,这些函数统称为“gettext”。
什么是本地化?
本地化是对国际化插件进行翻译的后续步骤。它的缩写为l10n,因为“l”和“n”之间有10个字母。l10n
本地化文件POT(可移植对象模板)文件
这个文件里包含了插件的原始字符串(英文)。
PO(可移植对象)文件
每个翻译人员都会拿到这个文件,然后把各个部分翻译成他们的语言。生成的文件格式与原文件相同,但里面是翻译好的内容,且有一些独特的标头。每种语言都有一个对应的文件。POTmsgstrPOPOTPO
MO(机器对象)文件
这个文件是从每个翻译文件构建而来的。它们是gettext函数实际使用的二进制格式文件(对文件的实际内容不关心),也就是文件的“编译”版本。转换通常通过命令行工具完成。一般来说,应用程序可能会有多个大型逻辑可翻译模块和不同的文件。
深入了解WordPress国际化与本地化
嘿,朋友们,今天我们来聊聊WordPress的一个很重要的概念——国际化。简单说,就是通过一些函数把文字(比如字符串、变量、单复数形式等)标记为可以翻译的样子。而本地化呢,就是把这些已经标记好的文字翻译成你想要的语言。对开发者来说,国际化是个必须考虑的问题。如果你想把主题或插件翻译成我们美丽的中文,其实只需要掌握本地化的要领就行了。
如果你想深入了解如何在WordPress中实现国际化,或者如何使用Gettext函数,可以参考一下《如何国际化你的插件》这篇文章。
本地化的实现
接下来,我们重点聊聊怎么实现本地化。
举个例子,当你打开一个已经完成国际化的主题或者插件的源代码时,可能会看到很多像这样的代码:
__( ‘Blog Options’, ‘my-plugin’ ); 这样的表达。这里的函数格式是:__(‘文本域’,‘路径域’)。其中,文本域就是可以被翻译的内容,也就是前端展示出来的部分,而路径域则定义了插件翻译的位置。
回顾之前提到的,.pot文件是模板,.po文件是可编辑的翻译文件,而.mo文件则是编译后的版本。简单来说,当WordPress看到这条语句__( ‘Blog Options’, ‘my-plugin’ );时,它会在众多的.mo文件中通过my-plugin进行匹配。如果找到的mo文件里有Blog Options的翻译项,它就会把Blog Options替换成翻译后的文本并显示在页面上。
这样解释是不是更容易理解了呢?接下来,我们来看看如何创建和编辑翻译文件。
当你下载了一个已经国际化的主题或插件,通常会在languages或lang目录下找到一个.pot文件,或者多个.po文件。其他的文件不太重要,咱们只需要.pot的模板文件。有了这个翻译模板文件,就可以用Poedit等软件来创建对应语言的po文件,进行编辑并生成mo文件,供WordPress使用。
解析po翻译文件
如果没有.pot文件,别担心,接下来会讲到如何创建这个模板文件。
下面我给大家展示一个po文件的例子:
# 版权所有 (C) 2023
# 本文件根据GPLv2协议发布。
msgid ""
msgstr ""
"Project-Id-Version: Smush Pro 3.14.0n"
"Report-Msgid-Bugs-To: https://wpmudev.comn"
"POT-Creation-Date: 2023-07-21 12:47+0800n"
"PO-Revision-Date: 2023-08-15 15:14+0800n"
"Last-Translator: cnuu n"
"Language-Team: n"
"Language: zh_CNn"
"MIME-Version: 1.0n"
"Content-Type: text/plain; charset=UTF-8n"
"Content-Transfer-Encoding: 8bitn"
"Plural-Forms: nplurals=1; plural=0;n"
"X-Generator: Poedit 3.3.2n"
"X-Domain: wp-smushitn"
#. 插件名称
#: app/class-admin.php:285 app/class-admin.php:324
#: app/pages/class-dashboard.php:110 app/pages/class-dashboard.php:353
#: app/views/directory/meta-box.php:43 core/modules/bulk/class-mail.php:65
msgid "Smush Pro"
msgstr "Smush 专业版"
这段代码展示了一个.pot文件的内容,用来进行国际化。下面是每一行的解释:
- “Project-Id-Version: Smush Pro 3.14.0n”:定义了项目的版本号。
- “Report-Msgid-Bugs-To: https://wpmudev.comn”:提供了报告消息ID和bug的链接。
- “POT-Creation-Date: 2023-07-21 12:47+0800n”:说明了这个模板的创建时间。
- “PO-Revision-Date: 2023-08-15 15:14+0800n”:标记了上次修订模板的时间。
- “Last-Translator: cnuu n”:记录了最后翻译这个模板的人和他们的邮箱。
- “Language-Team: n”:标识了负责特定语言的翻译团队。
- “Language: zh_CNn”:指明了这个模板的语言版本,这里是简体中文。
- “MIME-Version: 1.0n”:指定了MIME版本。
- “Content-Type: text/plain; charset=UTF-8n”:定义了内容类型和字符集,这里是纯文本和UTF-8。
轻松掌握 WordPress 翻译的秘诀
- “Content-Transfer-Encoding: 8bitn”: 这里提到的是内容传输编码方式,采用的是8位编码。
- “Plural-Forms: nplurals=1; plural=0;n”: 这表示复数形式的规则,在这种情况下,只有一种复数形式可用。
- “X-Generator: Poedit 3.3.2n”: 这里是生成这个模板所使用的工具名称和版本。
- “X-Domain: wp-smushitn”: 这是与该模板相关联的域名或项目名,这里指的就是wp-smushit插件。
接下来是那些被双引号包围的字符串,它们是消息ID和对应的原始字符串(msgid)以及翻译后的字符串(msgstr)。比如:
- msgid “Smush Pro” 表示原始文本是 “Smush Pro”。
- msgstr “Smush 专业版” 表示翻译后的文本是 “Smush 专业版”。
在这其中,#: app/class-admin.php:285 app/class-admin.php:324 这样的标记显示了这些字符串在源代码中的位置,这对于翻译者很有帮助,因为可以明确这些字符串的使用场景,便于准确翻译。
如果你对上述内容有了理解,那么其实无需借助任何软件,你也能手动创建.po文件。
关于文件的命名规则:
比如可以命名为wp-plugin-name-zh_CN.po
当然,文件名要用中文,单词之间用-连接,最后的zh_CN标识使用的是ISO 639-1标准里的语言代码,比如:
- en_US(英语)
- zh_CN(简体中文)
- fr_FR(法语)
- de_DE(德语)
- es_ES(西班牙语)
完成编辑后,生成的.mo文件应该放在主题或插件目录下的languages文件夹,或者在wp-content/languages/的相应目录下。不同的开发者可能有不同的处理方式,所以要灵活应对。
掌握了这些知识,翻译工作就不再复杂,相信你现在已经迫不及待想要动手了。不过,等等,接下来的内容可是你在别的地方不容易找到的实用经验总结哦。
你可能会碰到这样一种情况,某些文本在翻译文件中已经添加,并且翻译也生效了,但仍有部分内容无法翻译。
这时,你需要查找这段文本在源代码中的位置,确认它是否已经进行了国际化定义,也就是之前提到的函数__(‘文本域’,”路径域”);,并确认路径域是否与你的翻译文件一致。
如果没有进行函数定义,你就需要手动在源代码中添加这个定义,了解函数的用法,比如__()、_e()、_x()、_ex()、_n()和_nx()的区别与使用方法。如果路径域与你的翻译文件不匹配,你也可以选择更改路径域,或者创建一个与之对应的翻译文件。
还有一种可能,就是这段文本的最终输出是通过JS文件实现的。
如何在 WordPress 中翻译 JavaScript 内容
WordPress 5.0 引入了 wp-i18n JavaScript 包,它能提供与 PHP 相似的功能,用于添加可翻译字符串。原文链接
简单来说,一般情况下,PHP文件输出的文本可以直接用mo文件翻译,而JS文件输出的文本则需要生成相应的JSON文件才能翻译。
要生成JSON翻译文件,可以利用WP-CLI来完成。
怎样安装WP-CLI
WP-CLI是一个非常实用的命令行工具,专为WordPress用户设计。换句话说,它的存在就是为了给WordPress管理员提供一整套命令,帮助他们更高效地管理网站。
如果你想安装WP-CLI,最推荐的方式就是下载Phar格式的文件(这和Java的JAR文件类似)。然后,你只需要把这个文件设置为可执行,并放到系统的PATH中。
不过,在安装之前,别忘了确认你的环境符合要求:
- 你需要有类Unix环境(比如OS X、Linux、FreeBSD、Cygwin),Windows的支持相对有限。
- 安装的PHP版本要在5.6及以上。
- WordPress版本要在3.7或更高,旧版可能会有功能限制。
确保满足这些要求后,你可以使用或者下载wp-cli.phar文件:wgetcurl
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
下载完毕后,接下来需要检查这个Phar文件是否能够正常运行:
php wp-cli.phar --info
想要通过命令行使用WP-CLI,你得先把文件设为可执行,并移动到系统的某个路径下,比如:wp
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
如果安装顺利,当你运行以下命令时,应该能看到相关信息:wp –info
$ wp --info
OS: Linux 5.10.60.1-microsoft-standard-WSL2 #1 SMP Wed Aug 25 23:20:18 UTC 2021 x86_64
Shell: /usr/bin/zsh
PHP binary: /usr/bin/php8.1
PHP version: 8.1.0
php.ini used: /etc/php/8.1/cli/php.ini
MySQL binary: /usr/bin/mysql
如何在Windows上安装wp-cli
首先,你得先装好PHP,并把php.exe的路径添加到系统的环境变量Path里。
接着,下载wp-cli.phar文件,放到你想要的文件夹里,比如我就放在D:Toolswp-cli这个目录。
在D:Toolswp-cli目录下,创建一个名为wp.bat的文件。
然后,打开这个文件,输入以下内容:
@ECHO OFF
php “D:/Tools/wp-cli/wp-cli.phar” %*
最后,别忘了在环境变量Path里添加D:Toolswp-cli这个路径哦。
更新WP-CLI
你可以通过输入 (doc)或者重复安装的步骤来更新WP-CLI,也可以直接用命令wp cli update。
如果WP-CLI是属于root或者其他系统用户的话,你可能需要用命令sudo wp cli update来进行更新。
用WP-CLI生成JSON翻译文件
wp i18n make-json .po --no-purge
这里的.po就是你已经搞定的po文件。
这个命令的执行会生成一些名为plugin-name-zh_CN-[md5].json的文件
其中的md5值是固定的,你只需要把生成的json文件放到相应的目录里,就能实现对js文本的翻译啦。
用WP-CLI生成POT翻译模板
- 下面的命令可以用来生成POT文件:
wp i18n make-pot .pot
在这个命令中,把换成你想要的POT文件名称,比如myplugin。然后,把替换成你想提取翻译字符串的那个插件或主题的目录。
2. 当你执行这个命令时,WP-CLI会自动查找你指定目录下的翻译字符串,并把它们提取到你指定的POT文件里。
3. 最后,你会得到一个叫.pot的文件,里面包含了你的WordPress插件或主题的翻译字符串。你可以随便用文本编辑器打开它查看和编辑。
想要深入了解WP-CLI的安装和使用,可以访问https://wp-cli.org/。
这篇文章是作者@avenjan对WordPress本地化翻译的一些想法和总结,想和有兴趣的朋友们分享。内容可能不够专业,但希望能给你们带来一些帮助。如果有任何疑问或建议,欢迎在评论区交流哦,感谢大家的关注!

文章详细介绍了WordPress的国际化和本地化,让我对如何支持多语言有了更清晰的理解。对开发者来说,这些信息非常实用,尤其是关于WP-CLI的部分,值得深入学习。
对国际化和本地化的解释很清晰,特别是对开发者来说,掌握这些知识能更好地服务多语言用户。
深入浅出的讲解了国际化和本地化的概念,对于想要开发多语言主题和插件的朋友们,真的是很有帮助。特别是WP-CLI的使用,节省了很多时间。
对于想深入理解WordPress多语言支持的人,这篇文章提供了很好的概念和实用步骤,特别是关于PO和POT文件的处理,真的很有启发。
了解国际化和本地化的关键概念后,开发多语言插件和主题变得简单多了。文章里的步骤清晰明了,特别是关于WP-CLI的部分,真的很实用。
理解了国际化和本地化的流程后,开发多语言插件的信心更足了。特别是文中对PO和POT文件的讲解,让我对翻译管理有了新的认识。实用性很强。
掌握国际化和本地化的概念后,我发现开发多语言主题和插件并没有想象中那么复杂。尤其是对WP-CLI的使用讲解,非常实用,让我对翻译流程有了更深入的认识。