在 WordPress 插件管理 ajax 调用中,使用站点区域设置的方式是什么?

con*_*cti 5 ajax wordpress plugins locale

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

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

switch_to_locale( get_locale() )在ajax 调用操作处理程序的第一行添加该语句后,使用默认文本域的表达式__( 'Sunday' )确实被翻译为希腊语。然而,诸如此类的表达方式__( 'Sunday', 'my-plugin-textdomain' )从未被翻译。

我的问题是如何在 ajax 调用期间在我的网站(而不是我的个人资料)区域设置中显示来自插件文本域的字符串?

注意:

  • 在将我的个人资料的区域设置切换为英语之前,一切正常(也就是说,所有字符串都被翻译为希腊语)。
  • 我正在由动作plugins_loaded触发的函数中加载插件的文本域。
  • 在互联网上搜索并没有找到有用的结果,因为最近在最新版本中发布了设置用户区域设置的功能。

Tah*_*ksu 3

这是一个迟到的答案,但我今天发现了如何在 AJAX 调用工作之前加载相关文本域,需要在这里分享:

将隐藏的输入字段添加到您的表单或附加到您的数据:

<input type='hidden' name='lang' value='<?php echo get_locale();?>'>
Run Code Online (Sandbox Code Playgroud)

或者

{
   lang: '<?php echo get_locale()?>',
}
Run Code Online (Sandbox Code Playgroud)

然后,在函数调用之前load_*_textdomain(),写下以下内容:

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

它将把区域设置切换到所需的区域设置。请注意,区域设置类似于en_USel相对于您的.mo文件名。