后退
榜单
首页>帮助中心>应用软件安装教程>WordPress 程序的国际化(i18n)原理与常见问题

WordPress 程序的国际化(i18n)原理与常见问题

WordPress 的国际化是通过使用 GNU gettext 库实现的。国际化(Internationalization,简称i18n)是为了使软件能够适应不同国家地区的语言而设计的。本文将介绍该过程以及一些常见问题。

WordPress 主题或插件中实现国际化的一般步骤

在插件代码中使用翻译函数

在插件的代码中,将需要本地化的字符串包裹在专门的翻译函数中。WordPress中常用的翻译函数是__()_e()。这两个函数会将包裹的字符串标记为可翻译的,并在后续步骤中生成翻译文件。 例如:

   // 使用 __() 函数标记需要翻译的字符串
   $text_to_translate = __('Hello, World!', 'text-domain');
   // 使用 _e() 函数直接输出并翻译字符串
   _e('Welcome to my plugin!', 'text-domain');

生成 POT 文件

POT(Portable Object Template)文件是一个包含所有标记字符串的模板文件。通过运行提取工具(通常是 xgettext 或类似工具)来生成这个文件。在插件目录中运行命令,类似于:

   xgettext -o languages/text-domain.pot -k__ -k_e -r -n --sort-by-file *.php

这将扫描插件目录中的PHP文件,找到标记的字符串,并生成POT文件。

创建 PO 文件

PO(Portable Object)文件是包含实际翻译的文件。对于每种语言,都会有一个对应的PO文件。可以使用工具如 Poedit 来创建和编辑这些文件。

PO文件名的后部分用来区分语言,例如下面是一些常见语言的 .po 文件:

  1. 英语(English): en_US.po
  2. 法语(French): fr_FR.po
  3. 德语(German): de_DE.po
  4. 西班牙语(Spanish): es_ES.po
  5. 葡萄牙语(Portuguese): pt_PT.po
  6. 意大利语(Italian): it_IT.po
  7. 荷兰语(Dutch): nl_NL.po
  8. 俄语(Russian): ru_RU.po
  9. 日语(Japanese): ja_JP.po
  10. 简体中文(Simplified Chinese): zh_CN.po
  11. 繁体中文(Traditional Chinese): zh_TW.po

这些后缀中的语言部分使用 ISO 639-1 语言代码,而地区部分使用 ISO 3166-1 alpha-2 代码。这种命名约定有助于标识特定语言和地区的翻译文件。

翻译 PO 文件

在 PO 文件中,将每个标记的字符串翻译成目标语言,每个翻译都与原始字符串对应。

WP Rocket 插件汉化文件 rocket-zh_CN.po 编辑示例
WP Rocket 插件汉化文件 rocket-zh_CN.po 编辑示例

编译成 MO 文件

MO(Machine Object)文件是PO文件的编译版本,它包含了实际的二进制翻译。

例如 WP Rocket 插件汉化文件 rocket-zh_CN.po 编译后,成为 rocket-zh_CN.mo。

其中 “rocket” 指的是该插件的文本域(text-domain),“zh_CN”则说明是简体中文。

加载翻译文件

在插件的代码中,通过使用load_plugin_textdomain函数加载翻译文件。这样 WordPress 就知道在显示插件文本时要使用哪个翻译。

   load_plugin_textdomain('text-domain', false, dirname(plugin_basename(__FILE__)) . '/languages/');

这里,text-domain是你的插件的文本域,languages是存放翻译文件的目录。

更新翻译文件

在插件更新时,需要更新POT文件,并通知翻译者更新PO文件。这确保插件始终包含最新的翻译。

通过这些步骤,WordPress 主题或插件就能够支持多语言,并能够在不同语言环境下提供本地化的用户体验。

为什么有些主题或插件不能翻译?

有些主题或插件不能被翻译/汉化的原因可能有多种。以下是一些常见的原因:

缺乏国际化支持

一些主题或插件的开发者可能没有在代码中使用国际化函数,如 __() 或 _e(),来标记需要翻译的字符串。缺少这些标记意味着 WordPress 无法识别哪些文本需要被翻译。

典型的示例:WordPress Automatic 插件。

缺少语言文件

即使在代码中使用了国际化函数,有些主题或插件可能没有提供相应的语言文件(.po 和 .mo 文件)。这些文件包含实际的翻译内容。如果缺少这些文件,WordPress 就无法加载正确的翻译。

对于这种情况,可以使用第三方工具(如 Poedit )提取程序中所有可翻译的文本生成 POT 文件,然后再创建 po 文件进行翻译后生成 mo 文件。

未注册文本域

开发者在使用国际化函数时,需要为每个主题或插件定义一个唯一的文本域。如果文本域未正确注册,WordPress 可能无法找到相应的翻译文件。

不规范的代码实践

一些主题或插件的开发者可能没有按照 WordPress 的国际化最佳实践编写代码。这可能包括硬编码文本而不是使用变量、动态生成的字符串未正确标记等。

示例:Yoast SEO Premium,该插件的大部分代码是可以翻译的,但还有一部分代码是未按照 WordPress 的国际化标准编码进行的,所以它的汉化包只能翻译一部分。

未提供更新的翻译文件

主题或插件在更新时,如果开发者没有更新语言文件,新的翻译可能不会生效。翻译者需要知道并重新翻译或更新相应的语言文件。

上传了 mo 文件但没有效果

  1. 如果主题或插件没有具体说明 .mo 文件存放路径,主题的翻译包默认应存放在 WordPress 中的wp-content/languages/themes 目录中,而插件则是:wp-content/languages/plugins 目录。
  2. 语言包应与 WordPress 常规选项中的“站点语言”选项是相同的语言才会生效。
  3. mo 文件的文件名错误,需详细检查文件名称中的“文本域”与“语言”部分是否正确。

不能翻译的解决办法

如果你遇到一个不能被翻译/汉化的主题或插件,可以尝试以下解决方法:

  • 联系开发者: 尝试联系主题或插件的开发者,询问是否有国际化支持,以及是否有提供语言文件。
  • 手动汉化: 因为 WordPress 的主题与插件都是开源的,这意味着可以手动在代码中查找需要翻译的字符串并进行翻译。但这不是一个理想的解决方案,因为每当主题或插件更新时需要重新翻译。

总的来说,国际化的支持和提供完整的翻译文件是确保主题或插件可以成功翻译/汉化的关键。

0 条回复 A文章作者 M管理员
夸夸
夸夸
还有吗!没看够!
    暂无讨论,说说你的看法吧
购物清单
优惠代劵
快速搜索
关注我们
  • 扫码打开当前页