当在gettext调用(\\uu()、\\ u e()等)中加载内容时,当我在浏览器中正常呈现页面时,它们可以很好地进行翻译(PHP将内容传递给浏览器),但是当我进行AJAX调用时,gettext不会进行翻译。
我想可能就是这个词,但当我在通常从服务器(而不是通过ajax)加载的内容中使用gettext调用时,它会进行翻译。我正在使用WPML,但我不认为这与它有任何关系?
是否有什么特殊的事情需要我做,或者将load\\u plugin\\u textdomain函数调用添加到特定的操作挂钩?
它现在已添加到“plugins\\u loaded”操作中。我使用他们文档中描述的WordPress ajax方法,我得到了所有数据,只是没有得到gettext翻译。
正如这里所建议的,这些代码片段存在问题。我没有包含gettext。罐和。据我所知,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();
?>
SO网友:alibabaei
为时已晚,但供公众使用:
/* 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
}