我正在寻找一种方法,使我的插件选项在多语言网站上可用/可翻译。
例如,我的几个选项是文本字符串,然后在前端使用。
echo get_option( \'my_plugin_text\', __( \'Whoa default text\', \'my-plugin\' ) );
然而,我注意到,这些字符串不能被WPML翻译。我也可以通过其他多语言插件来推测。这些选项的全部目的是为用户提供一种自定义某些文本的方法,但在多语言环境中,这一点目前被否定。
由于选项文本会有所不同,因此将整个内容包装在gettext
功能:
_e( get_option( \'my_plugin_text\', __( \'Whoa default text\', \'my-plugin\' ) ), \'my-plugin\' );
我可以将整个内容包装在一个过滤器中,但人们有义务知道如何编写过滤器来更改文本,但这再次违背了允许用户从管理员处更改这些特定文本字符串的目的。
我收到的一个建议是get_locale()
.
$text = get_option( \'my_plugin_text_\' . get_locale(), false );
if( $text === false ){
$text = get_option( \'my_plugin_text\', __( \'Whoa default text\', \'my-plugin\' ) );
}
echo $text;
这似乎很合理,但我对多语言插件不太熟悉,不知道这是否会普遍适用。管理端的语言环境是否也发生了变化,以至于有人可以将插件选项保存为英语版本,然后为(例如)西班牙语版本保存不同的文本?
有人碰到过这个吗?有没有其他我忽略的解决方案?
SO网友:gmazzap
WP翻译函数用于翻译静态字符串。E、 g.关于选项,您应该使用它们来转换标签,而不是值。
然而,据我所知,WPML的翻译实用程序与标准翻译相反,也就是说,如果使用标准翻译,则无法使用从加载转换。采购订单/。mo文件。
如果用户想使用该功能,每个人都可以在自己的网站上自由访问自己喜欢的内容,但我真的不会在其上构建插件。
这个get_locale()
技巧可用于检索选项值,但不能用于保存选项值:您可以确保函数返回网站访问者正在查看的页面的语言,但get_locale()
在管理页面中,假定返回管理员在管理页面中导航的区域设置,而不是要保存的选项值的区域设置。
您需要的工作流程如下:
检查站点是否为多语言站点。如果不只是输出一个字段,还可以选择在表单中保存\'my_plugin_text_\' . get_locale()
. 其中甚至使用唯一的区域设置来构建选项名称。
如果站点是多语言的,则为每个选项显示多个字段,每个站点语言显示一个字段。这意味着您必须能够获得所有站点语言,并且no 执行此任务的标准方法:您必须查看各种插件文档(或请求插件支持),然后显示将保存的相应字段,并将其附加到选项名称和适当的区域设置。
这太痛苦了。没有通用性只是问题的一部分,它带来了不平凡的编码开销,并且很容易使选项页变得凌乱和臃肿。
另一种方法可能是使用标准WP实体,例如POST或分类术语来存储信息。
E、 g.如果您想要翻译的选项文本存储为CPT标题,您不必担心翻译它们:所有翻译插件都能够翻译CPT标题,它们将提供翻译UI。
我不知道你的插件是否适合这个工作流,但如果是这样的话,我认为这是一个更好的解决问题的方法。