很抱歉这个冗长的解释,但是自从我从WordPress 3.8升级到WordPress 4.1以来,我有一段时间试图让客户的WordPress网站从英语切换到韩语,反之亦然(从前端公共方面) .

我了解WordPress 4.0现在使用仪表板设置中的"language selector"来确定网站在全球范围内显示的语言,但是客户端需要网站根据访问者的偏好切换语言,而不是在仪表板中设置 . 客户端只希望管理员级用户访问仪表板,这意味着所有其他(常规)用户将被保留在他们自己的仪表板之外 .

我已经实现了一个简单的公共语言切换,它与WordPress 3.8和一个名为qTranslate的插件一起使用效果非常好(它们只是可以单击以更改语言的链接):

English | 한국어

自升级到WP 4.0以来,我不得不停止使用qTranslate(与WP 4.0不兼容)并开始使用qTranslate Plus(https://wordpress.org/plugins/qtranslate-xp/) .

但是现在WP 4.0忽略了qTranslate Plus试图做的事情,特别是像BBPress这样的大插件 .

我在网站上多次使用一个方便的功能,允许我确定用户当前选择的语言 . URL也相应更改 . 例如:

English version - example.com/

Korean version - example.com/KO/ (如果用户点击上述韩文链接,则在域名后添加一个简单的"KO/")

我用来确定用户当前启用的语言的函数如下所示:

$current_lang = ppqtrans_getLanguage(); // function is from qTranslate Plus
if ($current_lang == "KO") {
    // do what I need to do here in Korean  
} else if ($current_lang == "en") {
    // do what I need to do here in English 
}

以上在自定义页面上工作得很好,但我也使用BBPress和Event Espresso(事件注册软件和支付网关),升级到WordPress 4.1之后不再切换到韩语,现在我的客户端正在肆虐 .

我尝试在主题的functions.php文件中使用这样的函数,但它似乎没有工作:

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

    $current_lang = ppqtrans_getLanguage();

    if ($current_lang == "KO") {
        $locale = "ko_KR";

    } else if ($current_lang == "en") {
        $locale = "en_US";

    }

    return $locale;

}

对不起,如果以上看起来完全错误 . 我仍然试图 grab 钩子和过滤器 .

无论如何,如果有人知道如何获得像BBPress和Event Espresso这样的插件来注意动态改变的语言环境,那将是惊人的!甚至Event Espresso的工作人员也不知道如何使这项工作得以实现 . 我只是不明白为什么看似如此简单的东西很难实现!

非常感谢你的时间!

TL; DR:我正在尝试动态更改WordPress 4.0语言区域设置,具体取决于URL的外观 . example.com/应将网站设置为英文 . example.com/KO/应将站点设置为韩语 - 而不使用仪表板中语言选择器中的设置 .