Wordpress无法通过Ajax请求加载正确的语言Mo-文件

use*_*507 5 php ajax wordpress translation

我制作了一个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);
 });
});
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在尝试以英语(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;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,警报“ ID nicht gefunden:123 ”弹出了,尽管它应该是“ ID not found: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';
}
Run Code Online (Sandbox Code Playgroud)

我还尝试了一些插件:XILI语言,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');
Run Code Online (Sandbox Code Playgroud)

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

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

小智 0

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

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

LANG是你的语言文件名