小编典典

在WordPress插件admin ajax调用中,使用网站区域设置的方法是什么?

ajax

升级到WordPress 4.7后,我将语言字段从个人资料更改为英语,而网站的语言设置为希腊语。

我写了一个显示小部件的插件。该小部件正在通过ajax调用刷新其内容。正如这里提到的(请参阅 有关admin-ajax.php的注释
),通常以我个人资料的语言(英语)返回字符串,但我希望将其放在网站的语言环境(希腊语)中。

switch_to_locale( get_locale() )ajax调用操作处理程序的第一行添加语句之后,使用默认文本域(例如)的表达式__( 'Sunday' )确实会转换为希腊语。但是,像这样__( 'Sunday', 'my-plugin-textdomain' )的表达式永远不会被翻译。

我的问题是, 在ajax调用期间,如何在网站(而非个人资料)的语言环境中显示来自插件文本域的字符串?

注意:

  • 在将我的个人资料的语言环境切换为英语之前,一切工作正常(也就是说,所有字符串都被翻译成了希腊语)。
  • 我正在通过操作 plugins_loaded 触发的函数加载插件的textdomain 。
  • 搜索互联网并没有带来有用的结果,因为设置用户语言环境的功能最近以最新版本发布。

阅读 174

收藏
2020-07-26

共1个答案

小编典典

这是一个较晚的答案,但我发现了如何在AJAX调用今天开始工作之前加载相关文本域,需要在此处共享:

在表单中添加一个隐藏的输入字段,或在数据中追加以下内容:

<input type='hidden' name='lang' value='<?php echo get_locale();?>'>

要么

{
   lang: '<?php echo get_locale()?>',
}

然后,在load_*_textdomain()函数调用之前,编写以下代码:

if (isset($_GET["lang"])) {
    $locale = $_GET["lang"];
    add_filter('determine_locale', function()use($locale){ return $locale; });
}

它将语言环境切换到所需的语言环境。请注意,语言环境与文件名类似en_USel相对.mo

2020-07-26