在一个WordPress插件 AJAX 调用,这是使用网站的区域设置的方式?

jvidinwx  于 2023-03-29  发布在  WordPress
关注(0)|答案(2)|浏览(189)

升级到WordPress 4.7后,我将个人资料的语言字段更改为英语,而网站的语言设置为希腊语。
我写了一个插件来显示一个小部件。这个小部件通过 AJAX 调用来刷新它的内容。正如提到的here(见 Note about admin-ajax.php),字符串通常以我个人资料的语言(英语)返回,但我更喜欢在网站的语言环境(希腊语)中使用它们。
在 AJAX 调用操作处理程序的第一行添加了switch_to_locale( get_locale() )语句后,使用默认文本域的表达式(如__( 'Sunday' ))确实会被翻译成希腊语。但是,像__( 'Sunday', 'my-plugin-textdomain' )这样的表达式永远不会被翻译。
我的问题是在 AJAX 调用期间,我如何在我的站点(而不是我的个人资料)的区域设置中显示来自插件文本域的字符串?
请注意:

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

z31licg01#

这是一个较晚的答案,但我发现了如何加载相关的文本域之前, 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; });
}

它会将locale切换到所需的locale。注意,locale就像是相对于.mo文件名的en_USel

rkkpypqq

rkkpypqq2#

让我们总结一下以上所有的评论,为大家写得正常易懂。
1)在表单中添加名称为“lang”的输入

<input type="hidden" name="lang" value="<?= get_locale(); ?>">

2)然后在function.php文件中,我们检查请求是否是 AJAX ,如果有一个带有“lang”名称的输入,那么我们覆盖区域设置

if( wp_doing_ajax() && $_REQUEST['lang'] ) {
  $locale = $_REQUEST['lang'];
  add_filter('determine_locale', function() use ($locale) { 
    return $locale;
  });
}

相关问题