WPML

了解如何注册来自插件和主题的用户输入文本以进行翻译。注册后,您可以使用字符串翻译来翻译它们。

如何注册用户输入文本

当用户创建新字符串或更新现有字符串时,需要将它们注册到 WPML 的字符串表中。

您可以通过 wpml_register_single_string 动作钩子进行此调用:

do_action( 'wpml_register_single_string', string $context, string $name, string $value )
  • $context – 插件或主题的名称,采用人类可读的格式。
  • $name – 字符串的名称,这有助于译员了解正在翻译的内容。
  • $value – 需要翻译的字符串。

考虑这个自定义小工具示例,它包含一个 title、单行 input 字段和一个 textarea。要在保存或更新小工具选项时注册这些字段以进行翻译,我们使用 update 函数

使用 wpml_register_single_string 动作钩子
function update($new_instance, $old_instance){
    $instance = $old_instance;
    $instance['title']      = strip_tags($new_instance['title']);
    $instance['custom_input']   = strip_tags($new_instance['custom_input']);
    $instance['custom_textarea']    = $new_instance['custom_textarea'];
 
    //WPML
    /**
     * register strings for translation
     */
    do_action( 'wpml_register_single_string', 'Widgets', 'Custom Widget - input field', $instance['custom_input'] );
    do_action( 'wpml_register_single_string', 'Widgets', 'Custom Widget - textarea field', $instance['custom_textarea'] );
    //WPML
 
    return $instance;
}

在此示例中,我们告诉 WPML 它需要翻译 input textarea 字段的用户输入文本。这些文本将分别以 Custom Widgetinput fieldCustom Widget – textarea field 为名称,注册在 Widgets 字符串上下文中。

注册文本后,您可以使用 wpml_translate_single_string 动作钩子在前端显示翻译。

如何将字符串翻译与插件和主题集成

字符串翻译与插件或主题集成时,确保调用存在非常重要。

实现条件调用

将调用包装在 if_function_exists() 语句中,这样如果激活了 WPML,它就会被调用;如果没有激活,则保持正常运行。

处理 WPML 的延迟激活

作为主题或插件开发者,您还应考虑用户在开始使用您的主题或插件很久之后才激活 WPML 的情况。

在这些情况下,字符串将不会被翻译,因为在创建它们时没有调用 wpml_register_single_string。为了解决这个问题,您应该在每次加载插件的管理后台屏幕时注册所有用户字符串。

虽然这会增加微不足道的执行时间,但它能保证字符串始终被发送以进行翻译并保持最新。

代码应首先检查 wpml_register_single_string 函数是否存在。如果存在,则应调用该函数以注册所有用户输入文本。其工作原理如下:

  • 如果使用空白或 NULL 值调用该函数,WPML 会忽略这些调用。
  • 如果字符串已经存在且未被修改,WPML 会忽略该调用。
  • 该函数仅在注册了新的或修改过的字符串时才会执行操作。

整个翻译表都缓存在内存中,因此重复调用它消耗的处理能力极小。

其他资源

要注册来自主题和插件的硬编码文本以进行翻译,请参阅我们关于查找未显示在字符串翻译页面上的字符串的文章。

要注册主题或插件选项以进行翻译,请参阅我们关于使用语言配置文件的指南。

要将主题或插件元素作为一个组进行翻译,请参阅我们的字符串包翻译

作者:Amir · 最后更新时间:2024年6月7日