WPML 帮助翻译由其他插件或主题创建的文本。 让我们以一个示例开始。

流行的 Contact Form 7 主题创建可添加到您网站的联系单。 您可以使用默认的字段(例如姓名和电子邮件),也可和添加您自己的字段。 当访客以不同的语言查看网站时,联系单也需要相应地以那些语言显示。

如果所有文本都硬编码到插件中,通过使用 gettext(插件的 .mo 文件)可将它们本地化。 但是,您要如何处理用户输入的文本? 如果用户添加新字段到联系单中,例如 『Profession』 ,使用主题的 .mo 文件就无法翻译该字段。 用户需要能够为此文本提供翻译。

WPML 中的字符串翻译

WPML 包含一个用于翻译此类文本的机制。 默认情况下,它帮助用户翻译博客的标题、标签行、文本小工具和 WordPress 生成的其他文本。 其他插件和主题也可以使用此机制来为它们需要显示的文本提供翻译。

1. 注册需要翻译的字符串

当用户创建新字符串或更新已有字符串时,需要将这些字符串注册到 WPML 的字符串表中。 为此,请调用:

icl_register_string($context, $name, $value)
  • $context – 以易于辨读的格式显示的插件名称。
  • $name – 字符串的名称,帮助用户(或译员)理解翻译的内容。
  • $value – 需要被翻译的字符串。

在我们的联系单示例中,当我们添加新字段(名为 『Profession』 )时,我们会调用:

icl_register_string('Contact Form 7', 'Input field label', 'Profession')

这将告诉 WPML 需要翻译字符串’Profession』 。 当用户进行翻译时,他们会看到该字符串时 『Contact Form 7』 插件的一部分,是个‘Input field label’(输入字段标签)。

如果插件不再需要翻译某一文本(例如,如果用户从联系单删除了该字段),可以通过使用此调用从翻译表删除该字符串:

icl_unregister_string($context, $name)

2. 在显示时使用译文

当联系单插件显示时,它需要获得译文并加以使用。 为此,它使用 icl_t 函数:

icl_t($context, $name, $value)

WPML 查找具有匹配的 $context$name 的字符串。如果找到,它将查找当前语言(网站显示语言)的译文。如果译文存在,则将返回译文。否则,它将返回原始字符串。

$value 参数被提供给 icl_t() 调用,因此在创建字符串而 WPML 未启用,造此字符串未注册的情况下,能够返回正常的字符串值。

WPML 内部的字符串翻译方式

WPML 包含一个字符串翻译界面,该界面列出字符串,允许用户管理它们的译文。

WPML 的字符串翻译界面

WPML 的字符串翻译界面

当用户单击字符串对应的翻译链接时,将打开一个多语翻译面板,允许用户编辑各语言的译文。每个译文包含一个完成标记。如果所有语言的翻译都完成,字符串本身也被标记为完成。

当字符串改变时,其所有译文将被标记为未完成, 以便让用户知道需要修订译文。

所有字符串都是在同一 WordPress 管理员界面中进行编辑的,无需外部调用任何外部服务。

如何将 WPML 字符串翻译与插件和主题相整合

当将字符串翻译整合到插件或主题中时,务必确保调用存在。

if function_exists() 语句中应当包含对 WPML 字符串翻译函数的调用。 这样,如果 WPML 已激活,则 WPML 将被调用。 否则,保持正常的操作。

另外,插件开发者应当考虑这样情况:用户在开始使用他们的插件很久以后才激活 WPML。 在此情况下,当创建新字符串时,没有调用 icl_register_string,因此这些字符串绝不会被翻译。 要克服此问题,最好是管理员屏幕每次载入插件时注册所有用户字符串。

这会增加可以忽略的执行时间,但可保证将所有字符串都被送交翻译并保持最新。 代码可以进行一次测试以查看 icl_register_string 是否存在,然后调用它以注册用户能够输入的所有字符串。

如果以空值或 NULL 值调用此函数,则它将被 WPML 忽略。如果字符串已经存在并且未被修改,此调用也被忽略。只有当注册了新的或经修改的字符串时,它才有效。

整个翻译表被缓存到内存,因此重复调用只占用很少的处理能力。

哪些内容需要被送交翻译

让我们从哪些内容无需通过使用 icl_register() 进行注册开始说起。

WPML 为不同的语言使用不同的文章、页面、标签和分类。 这意味着,如果网站包含这两个页面:example.com/about/example.com/es/sobre/,它们将是不同的 WordPress 页面。

按页面添加的任何文本已经以多语言显示,同时用户只需以撰写该页面所用语言输入正确的文本。

需要使用 WPML 的字符串翻译功能进行翻译的内容是不属于任何文章、页面、标签或分类的文本。 例如,搜索引擎优化插件允许输入首页标题的文本、关键字和描述。 此文本需要使用 WPML 的字符串翻译功能进行翻译。 这样,它将为不同语言的首页显示翻译后的内容。