Wordpress 无法通过 ajax 请求加载正确的语言 mo 文件

Posted

技术标签:

【中文标题】Wordpress 无法通过 ajax 请求加载正确的语言 mo 文件【英文标题】:Wordpress doesn't load correct language mo-file via ajax request 【发布时间】:2014-02-11 06:05:00 【问题描述】:

我制作了一个 wordpress 主题并将其设置为两种语言(EN 和 DE)。我还制作了所需的 mo 文件。我一开始在 wp-config.php 中将德语定义为默认语言。一切正常,但 AJAX 请求存在一些问题:它没有加载正确的语言文件。

我的场景:

我创建了一个通过 AJAX 请求数据的按钮/链接。像这样的东西(javascript):

jQuery('#button').click(function()
 jQuery.ajax(
  url: "http://myexampledomain.com/wp-admin/admin-ajax.php?lang=en",
  data:  action: 'my_action', id : 123 ,
  type: "POST",
 ).done(function (data)
  alert(data);
 );
);

如您所见,我正在尝试以英文加载我的信息 (url => ?lang=en)。我在我的functions.php中写了这段代码:

add_action("wp_ajax_nopriv_my_action", "my_action");
add_action("wp_ajax_my_action", "my_action");
function my_action()
 echo __( 'ID nicht gefunden:', 'mytheme' ) . $_POST['id'] ;
 exit;

我的问题是,虽然它应该是“ID not found:123”,但会弹出警报“ID nicht gefunden:123”。

wordpress 似乎没有加载正确的语言 mo 文件。

为了解决这个问题,我在 functions.php 中尝试了以下操作(但没有成功):

add_filter( 'locale', 'my_theme_localized' );
function my_theme_localized( $locale )
    if ( isset( $_GET['lang'] ) && $_GET['lang']=='en' )
        return 'en_US';
    
    return 'de_DE';

我还尝试了一些插件:XILI-language、qTranslate 和 Polylang。 结果是只有 qTranslate 能够通过 AJAX 请求加载正确的语言文件。 但 qTranslate 并不是我正在处理的某些任务的最佳解决方案。

我还找到了一个“解决方法”,通过将以下内容写入 wp-config.php 来加载正确的 mo 文件:

if(isset( $_GET['lang'] ) && $_GET['lang']=='en')
 define('WPLANG', 'en_US');
else
 define('WPLANG', 'de_DE');

但我不喜欢这种 hack(修改 wordpress 核心文件)。

是否有好的解决方案可以通过在 AJAX 请求中使用 $_GET['lang'] 参数来让 wordpress 加载正确的 mo 文件?我的functions.php 中需要什么代码?还有其他可行的解决方案吗?

【问题讨论】:

***.com/a/54925655/916000 【参考方案1】:

我遇到了同样的问题,我把下面的代码放在<?PHP 下,它解决了我的问题

load_theme_textdomain( LANG, get_template_directory() . '/lang' );

LANG 是您的语言文件名

【讨论】:

以上是关于Wordpress 无法通过 ajax 请求加载正确的语言 mo 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax 通过 WordPress 菜单在 div 中按类别加载最新帖子

Wordpress、管理菜单、Ajax 400 错误请求

Wordpress实现自定义ajax请求

此网页正试图从未经验证的来源加载脚本,怎么解决?

WordPress 和 Ajax - 重新加载短代码内容

联系表格 7 无法通过 AJAX 提交,因此重定向到 404