我正在开发一个网站,可以使用俄语和英语作为前端语言。该主题已将字符串翻译成两种语言。
现在我的问题是,每当我在登录时使用钩子时(例如,钩住发布后),字符串都会根据用户的区域设置而不是网站的区域设置进行翻译。这些字符串会保存为元数据,因此保存后我无法更改它们。
当某人使用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处理程序)设置为使用网站的语言环境?
最合适的回答,由SO网友:Mark Kaplun 整理而成
(这类问题是为什么我的标准建议是不使用两种语言的前端的一部分)
问题的核心原因是ajax返回文本。AJAX应该被视为提供机器级值的API,前端将这些值转换为人类文本。当您的代码这样构建时,您也会得到更好、更灵活的代码,因为您的业务逻辑与表示逻辑是解耦的。
因此,您应该做的是在处理AJAX的JS中包含一个值到文本的转换(如果开发时间短,则使用英文文本作为“值”,而不是纯文本,而不是整数类型的值)。
这显然会使JS膨胀,因此使用wp_localize_script
仅根据上下文将所需内容排队,但仅将其放入JS本身并不是世界末日。(这显然在很大程度上取决于如何获得实际的翻译,如果它是在通常的wordpress.mo文件中,那么唯一的选择就是第一个)。
(对于那些认为wtf?的人来说,即使你的网站是英文的,你也很可能需要进行日期-时间本地化,而这只能在浏览器端完成,货币、千位分隔符也是如此,因此JS端本地化的想法虽然目前在WP中不太流行,但也存在一些现实问题,几乎只有这样才能解决,因此在JS中扩展本地化应该自然的事情)