gettext не переводит при вызове ajax

Когда вы загружаете контент в вызовы gettext (__ (), _e () и т. Д.), Они отлично переносятся при рендеринге страницы в браузере (PHP доставляет контент в браузер), однако, когда я делаю вызовы AJAX, gettext делает не переводить.

Я подумал, что, возможно, именно это слово конкретно, но когда я использую вызов gettext в контенте, который загружается с сервера обычно (а не через ajax), он переводит. Я использую WPML, но я не думаю, что это связано с этим?

Есть ли что-то особенное, что мне нужно сделать или добавить вызов функции load_plugin_textdomain к определенному действию?

Он добавлен в действие «plugins_loaded» прямо сейчас. Я использую методы ajax WordPress, как описано в их документах, и я получаю все данные, просто не получаю gettext-переводы.

В качестве рекомендаций здесь приведены фрагменты кода, в котором есть проблема. Я не добавлял файлы gettext .pot и .mo, так как я знаю, что эти работы (bc / другой текст там переводится в остальную часть самого модуля). Я просто указываю, как их зовут и где они находятся, относящихся к корню плагина.

//gettext files // languages/my-plugin-fr_FR.pot // languages/my-plugin-fr_FR.mo //Javascript files // js/main.js (function($){ function getResources() { $.ajax({ type: "POST", url: ajax_object.ajaxurl, dataType: "json", data: { action: 'get_resources' } }) .done(function(data) { if (typeof data == "object" && data.hasOwnProperty("html")) { $(".my-selector").empty().html(data.html); } else { alert("error on server"); } }) .fail(function() { alert("error on server"); }); } $(document).ready(function() { getResources(); }); })(jQuery); // end js/main.js <?php //MyPlugin class class MyPlugin { /// This value will be used as a unique identifier for translations public static $theme_domain_name = 'my-plugin'; public function init() { if (!is_admin()) { //any scripts and styles needed for the plugin to work in the front end add_action( 'wp_enqueue_scripts', array($this,'add_scripts_styles') ); } add_action('wp_ajax_get_resources', array($this,'ajax_get_resources')); add_action('wp_ajax_nopriv_get_resources', array($this,'ajax_get_resources')); } public function ajax_get_resources() { $html = ""; //just an example of returning post objects $posts = get_posts(); $html .= $this->get_resources_html($posts); echo json_encode(array('html'=>$html)); die(); } public function add_scripts_styles() { wp_register_script('main-js', plugin_dir_url(__FILE__) . 'js/main.js', array('jquery'), '20131023' ); wp_enqueue_script('main-js' ); wp_localize_script('main-js', 'ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } public function get_resources_html($resources) { $load_more_text = __('Load more',MyPlugin::$theme_domain_name); //$html .= < do some other work on the resource posts provided > $html .= <<<LOAD <a href="#"> <span class="text-wrapper"><span class="text"> {$load_more_text} </span></span> </a> LOAD; return $html; } } ?> <?php //root plugin file my-plugin.php require_once dirname( __FILE__ ) .'/MyPlugin.php'; $MyPlugin = new MyPlugin(); add_action("plugins_loaded",function() { load_plugin_textdomain(MyPlugin::$theme_domain_name , false, dirname( plugin_basename(__FILE__) ) . '/languages/'); }); $MyPlugin->init(); ?> 

Solutions Collecting From Web of "gettext не переводит при вызове ajax"

это слишком поздно, но для общественного использования:

 /* if qTranslate is installed */ /* set front locale for ajax calls requested from front-end */ function set_locale_for_frontend_ajax_calls() { if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX && substr( $_SERVER['HTTP_REFERER'], 0, strlen( admin_url() ) ) != admin_url() ) { load_theme_textdomain( 'your-theme-domain-name', get_template_directory() . '/languages' ); } } add_action( 'admin_init', 'set_locale_for_frontend_ajax_calls' ); add_action('wp_head','jsURLs'); function jsURLs(){ global $q_config; ?><script type="text/javascript"> /* <![CDATA[ */ var ajaxurl = "<?php echo admin_url('admin-ajax.php?lang='.$q_config['language']); ?>"; /* ]]> */ </script><?php } 

он работает для меня, если qTranslate установлен, но если не последует, возможно, работает:

 /* if qTranslate is not installed */ /* set front locale for ajax calls requested from front-end */ function set_locale_for_frontend_ajax_calls() { if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX && substr( $_SERVER['HTTP_REFERER'], 0, strlen( admin_url() ) ) != admin_url() ) { setlocale(LC_ALL, $_GET['lang']); load_theme_textdomain( 'your-theme-domain-name', get_template_directory() . '/languages' ); } } add_action( 'admin_init', 'set_locale_for_frontend_ajax_calls' ); add_action('wp_head','jsURLs'); function jsURLs(){ global $q_config; ?><script type="text/javascript"> /* <![CDATA[ */ var ajaxurl = "<?php echo admin_url('admin-ajax.php?lang='.get_locale()); ?>"; /* ]]> */ </script><?php }