升级到WordPress 4.7后,我将语言字段从个人资料更改为英语,而网站的语言设置为希腊语。
我写了一个显示小部件的插件。该小部件正在通过ajax调用刷新其内容。正如这里提到的(请参阅 有关admin-ajax.php的注释 ),通常以我个人资料的语言(英语)返回字符串,但我希望将其放在网站的语言环境(希腊语)中。
在switch_to_locale( get_locale() )ajax调用操作处理程序的第一行添加语句之后,使用默认文本域(例如)的表达式__( 'Sunday' )确实会转换为希腊语。但是,像这样__( 'Sunday', 'my-plugin-textdomain' )的表达式永远不会被翻译。
switch_to_locale( get_locale() )
__( 'Sunday' )
__( 'Sunday', 'my-plugin-textdomain' )
我的问题是, 在ajax调用期间,如何在网站(而非个人资料)的语言环境中显示来自插件文本域的字符串?
注意:
这是一个较晚的答案,但我发现了如何在AJAX调用今天开始工作之前加载相关文本域,需要在此处共享:
在表单中添加一个隐藏的输入字段,或在数据中追加以下内容:
<input type='hidden' name='lang' value='<?php echo get_locale();?>'>
要么
{ lang: '<?php echo get_locale()?>', }
然后,在load_*_textdomain()函数调用之前,编写以下代码:
load_*_textdomain()
if (isset($_GET["lang"])) { $locale = $_GET["lang"]; add_filter('determine_locale', function()use($locale){ return $locale; }); }
它将语言环境切换到所需的语言环境。请注意,语言环境与文件名类似en_US或el相对.mo。
en_US
el
.mo