多语言主题:根据URL更改区域设置

时间:2012-07-24 作者:lupor

我正在开发一个多语言主题。我使用\\uuu()函数进行翻译,效果很好。主要语言是英语,但第二语言是德语。对于第二种语言,我想添加一个“/de/”-Slug,因此我创建了一个重写规则:

function rewrite_rule_de(){
    add_rewrite_rule(\'de/(.+?)/?$\', \'index.php?pagename=$matches[1]&language=de\', \'top\');
}
add_action(\'init\', \'rewrite_rule_de\');
如您所见,我还添加了一个get变量(language=de),它应该告诉Wordpress,显示的页面是德语。因为Wordpress不只是处理这个get变量,所以我将它添加到query\\u vars中:

function language_query_var($public_query_vars){
    $public_query_vars[] = \'language\';  
    return $public_query_vars;  
}
add_action(\'query_vars\', \'language_query_var\');
我想根据显示的页面语言更改区域设置,因此我使用以下函数:

function set_my_locale( $lang ){
  if (\'de\' == get_query_var(\'language\')){
    return \'de_DE\';
  }else{
    return \'en_US\';
  }
}
add_filter(\'locale\', \'set_my_locale\');
我这里的问题是get\\u query\\u var(\'language\')没有在函数“set\\u My\\u locale”中定义。但它在循环之前使用时有效,例如。。。

因此,我的问题很简单:如何根据重写规则更改语言环境(以便\\uu()-函数输出正确的语言)?

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

我的问题是get_query_var(\'language\') 未在函数中定义set_my_locale

因为get_locale (适用于过滤器locale) 之前已调用wp() (解析查询并设置变量)。

您必须自己手动检查请求:

if ( strpos( $_SERVER[\'REQUEST_URI\'], \'/de/\' ) === 0 ) {
    // German
} else {
    // English
}
注意,这需要WordPress在根URL下运行,即。http://example.com/

结束

相关推荐