如何在AJAX请求中设置区域设置?

时间:2017-05-25 作者:Johansson

我正在开发一个网站,可以使用俄语和英语作为前端语言。该主题已将字符串翻译成两种语言。

现在我的问题是,每当我在登录时使用钩子时(例如,钩住发布后),字符串都会根据用户的区域设置而不是网站的区域设置进行翻译。这些字符串会保存为元数据,因此保存后我无法更改它们。

当某人使用admin-ajax. 响应将使用用户的区域设置,而不是前端。所以我无法控制它。

Example:

add_action(\'wp_ajax_my_ajax\', \'my_ajax_function\');
function my_ajax_function(){
    _e(\'Hello!\',\'text-domain\');
}
我想要Hello! 字符串应使用网站的语言,而不是用户的语言。

Example 2 :

add_action( \'publish_post\', \'example_hook\' );
function example_hook($post_id){
    $data = __(\'Hello!\',\'text-domain\');
    add_post_meta($post_id, \'my_metadata\', $data);
}
这将保存Hello! 基于发布帖子的用户的语言,这并不酷,应该基于网站的语言。

是否可以将主题中发生的一切(包括functions.php中的ajax处理程序)设置为使用网站的语言环境?

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

(这类问题是为什么我的标准建议是不使用两种语言的前端的一部分)

问题的核心原因是ajax返回文本。AJAX应该被视为提供机器级值的API,前端将这些值转换为人类文本。当您的代码这样构建时,您也会得到更好、更灵活的代码,因为您的业务逻辑与表示逻辑是解耦的。

因此,您应该做的是在处理AJAX的JS中包含一个值到文本的转换(如果开发时间短,则使用英文文本作为“值”,而不是纯文本,而不是整数类型的值)。

这显然会使JS膨胀,因此使用wp_localize_script 仅根据上下文将所需内容排队,但仅将其放入JS本身并不是世界末日。(这显然在很大程度上取决于如何获得实际的翻译,如果它是在通常的wordpress.mo文件中,那么唯一的选择就是第一个)。

(对于那些认为wtf?的人来说,即使你的网站是英文的,你也很可能需要进行日期-时间本地化,而这只能在浏览器端完成,货币、千位分隔符也是如此,因此JS端本地化的想法虽然目前在WP中不太流行,但也存在一些现实问题,几乎只有这样才能解决,因此在JS中扩展本地化应该自然的事情)

结束

相关推荐

WordPress Translation Issue

我尝试使用以下代码更改文本function ctxtlearn_gettext( $ctxttranslation, $ctxttext ) { $ctxttrans = array_values(changeTxt_setting(\'trans\',true)); $ctxtdirty = false; $ctxtstrings_map = array(); $ctxttext_words = explode( \' \', $ctxttext