根据用户设置更改WordPress语言

时间:2015-01-19 作者:flomei

我想根据用户在个人资料(下拉菜单)中的选择更改WordPress安装的语言。

由于我想更改前端(为主题准备的.mo文件)和后端语言,我想我可以更改$locale 变量,它会成功的。

所以我在我的functions.php 但这不起作用:

function change_lang() {
   get_currentuserinfo();
   $lang = get_user_meta($current_user->ID, \'user_lang\');
   $locale = $lang[0];
   return $locale;
}
add_filter(\'locale\', \'change_lang\');
当我返回$locale, WP返回一个简单NULL, 没什么了。当我释放挂钩时,定义的值WP_LANG() 已返回。

所以,我在某个地方显然错了,但我找不到哪里。有什么提示吗?

此外:I read this for inspiration and code, 但如果可能的话,我不想把它作为插件。

提前感谢!

Edit: 修复了我的代码,但仍然没有发生语言更改。

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

您对的使用$current_user 有点错误,您应该包括global $current_user 或者将其分配给变量,或者更短、更干净get_current_user_id():

add_filter(\'locale\', \'change_lang\');
function change_lang( $locale ) {

   if( $lang = get_user_meta( get_current_user_id(), \'user_lang\', true) ) {
       return $lang;
   }

   return $locale;

}

SO网友:marciofao

我的插件也有类似的问题,但这里什么都不起作用。

经过几天的调查。我已经意识到,不可能将当前用户放入过滤器“locale”中。甚至不打电话给全球$user_locale.

显然,钩子“locale”是在init或其他任何东西之前触发的。

毕竟,在设置语言环境之前,我发现我正在加载插件文本域。所以,之后马上打电话switch_to_locale() 已修复问题。

这对我很有用:

function set_user_locale(){

   switch_to_locale(get_user_locale());

   load_plugin_textdomain( \'plugin-texdomain\', false, dirname( plugin_basename( __FILE__ ) ) . \'/languages\' ); 

}
add_filter(\'init\', \'set_user_locale\');

SO网友:l2aelba

你是说这个选项吗?

enter image description here

If yes, then...

$user_locale = get_user_locale();
function change_userlang_by_userlocale($locale){
    global $user_locale;
    return $user_locale ? $user_locale : $locale;
}
add_filter(\'locale\',\'change_userlang_by_userlocale\');

结束

相关推荐

Plugin Localization

我刚刚为wp构建了我的第一个插件,即使它不是一个伟大的“代码诗意”;)它正常工作。这是一个使用GalleryView 3.0 jquery插件转换默认wp库的插件(http://spaceforaname.com/galleryview).我唯一不能做的就是本地化。此插件的本地化意味着转换管理界面,在这里可以配置jquery插件选项来更改结果库的外观。我试着关注网络上数百万的教程,在论坛上阅读了很多关于这个问题的帖子,并遵循了codex的指南。。。但仍然没有运气。这就是我所做的:每个文本行都位于gette