我正在尝试做一件类似的事情,wp黑客邮件列表(Otto,Nacin)上的专家告诉我:
不要试图更改WPLANG,您无法更改定义的常量。相反,请更改全局$locale,或在“locale”上设置筛选器。
因此,最好的解决方案是对“locale”全局变量应用过滤器。唯一的方法是创建一个自定义插件。如果将以下代码放入functions.php
文件,它将无法正常工作,因为它将在WP加载序列中运行得太晚。
你的插件可能是这样的(我只是重复使用OneTrickPony的URI测试部分,你可以用另一种条件测试方法替换它):
<?php
/*
Plugin Name: Change locale at runtime
Plugin URI: http://wordpress.stackexchange.com/questions/49451/change-locale-at-runtime
*/
function wpsx_redefine_locale($locale) {
// run your tests on the URI
$lang = explode(\'/\', $_SERVER[\'REQUEST_URI\']);
// here change to english if requested
if(array_pop($lang) === \'en\'){
$locale = \'en_US\';
// otherwise stick to your default language
}else{
$locale = \'gr_GR\';
}
return $locale;
}
add_filter(\'locale\',\'wpsx_redefine_locale\',10);
?>
我希望这可以帮助任何人!
关于切换区域设置时的性能成本,还有一些警告(引用Andrew Nacin的话):
在加载默认语言环境后,可以“切换”一个语言环境,但我建议不要这样做,因为这样做效率很低,除非您的默认语言是英语,在这种情况下,英语还不错。
默认textdomain文件在plugins_loaded
和setup_theme
, 但在加载主题之前after_setup_theme
火灾。在上加载英语,然后将textdomain重新加载为德语init
钩子会很好,性能方面,因为英语没有mo文件。但在默认情况下加载西班牙语,然后切换到德语则不行。
看见http://codex.wordpress.org/Plugin_API/Action_Reference 有关加载顺序的有用信息。