WooCommerce:Checkout页面中的AJAX调用丢失翻译

时间:2014-02-02 作者:Giraldi

我正在使用WooCommerce 对于我目前正在开发的网站。我正在为英语以外的语言创建它。我通过.po 文件

我遇到的问题是Checkout page. 有一张桌子order review 在加载页面时,似乎通过以下方式刷新AJAX call. 在call 这些文本都是翻译的。但在call 课文全部恢复到原来的语言(即英语)。

How do I retain the translation after the AJAX call?

enter image description here

3 个回复
最合适的回答,由SO网友:2ndkauboy 整理而成

我想我用插件中的以下扩展函数修复了这个问题:

function localize_backend( $locale ) {
    // set langauge if user is in admin area
    if( defined( \'WP_ADMIN\' ) || ( isset( $_REQUEST[\'pwd\'] ) && isset( $_REQUEST[\'kau-boys_backend_localization_language\'] ) ) ){
        // ajax call from frontend
        if ( \'admin-ajax.php\' == basename( $_SERVER[ \'SCRIPT_FILENAME\' ] ) && strpos( admin_url(), $_SERVER[ \'HTTP_REFERER\' ] ) === false ) {
            // if lang request param was set, change locale for AJAX response, else, don\'t overwrite locale (use frontend locale)
            if ( ! empty( $_REQUEST[ \'lang\' ] ) ) {
                $locale = $_REQUEST[ \'lang\' ];
            }
        } else {
            $locale = backend_localization_get_locale();
        }
    }

    return $locale;
}
它将检查是否进行了AJAX调用。如果呼叫来自前端,它会检查lang 请求参数。如果能找到,那就是$locale 到该值。否则,它不会将区域设置更改为后端设置,因此它应该是在wp-config.php文件

请更新到插件的2.1版本,然后再次检查。

再次感谢@Rarst和@cybnet的提示。

SO网友:cybmeta

您的站点中有不同的语言,虽然您的前端不是多语言的,但您在前端提供一种语言,在后端提供另一种语言。Wordpress中的Ajax是在“管理区域”(wp admin/admin Ajax.php)中处理的,因此Ajax请求的响应将使用管理区域中定义的语言。你的情况是“英语”。

我不知道插件“后端本地化”是如何工作的,但其他影响该语言的插件需要在ajax请求中提供一个语言参数。例如,要使qTranslate在ajax中工作,必须将lang参数添加到javascript中的ajaxurl值中,例如ajaxurl+\'?lang=es\'. 您需要联系“后端本地化”的开发人员

SO网友:Raptor

另一种可能的修复方法是添加:

$is_ajax = true; 
line 11 在的替代版本中review-order.php, 应复制自:

wp-contents/plugins/woocommerce/template/checkout/
收件人:

wp-contents/themes/{YOUR_THEME}/woocommerce/checkout/

结束

相关推荐

AJAX:$html中的WordPress过滤器无法正常工作

我通过一些AJAX魔术发送HTML内容,虽然一切都如我所愿工作,但输出的内容与页面中的内容大致相同:\"http://permalink.comtitle\" 这就好像所有html标记(<;a>和<;p>)都被丢弃了一样。下面是函数中的PHP部分。php,我给$html赋值:if ($query->have_posts()){ while ($query->have_posts()){ $query-&g