了解如何注册来自插件和主题的用户输入文本以进行翻译。注册后,您可以使用字符串翻译来翻译它们。
如何注册用户输入文本
当用户创建新字符串或更新现有字符串时,需要将它们注册到 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 Widget – input field 和 Custom 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 会忽略该调用。
- 该函数仅在注册了新的或修改过的字符串时才会执行操作。
整个翻译表都缓存在内存中,因此重复调用它消耗的处理能力极小。
其他资源
要注册来自主题和插件的硬编码文本以进行翻译,请参阅我们关于查找未显示在字符串翻译页面上的字符串的文章。
要注册主题或插件选项以进行翻译,请参阅我们关于使用语言配置文件的指南。
要将主题或插件元素作为一个组进行翻译,请参阅我们的字符串包翻译。