我在根站点上使用了一个小主题来重定向到语言。一个非常小的主题,用于定位用户的语言并重定向到该语言的博客。
<?php
// Browsersprache ermitteln
function lang_get_from_browser($allowed_languages, $default_language, $lang_variable = NULL, $strict_mode = TRUE) {
// $_SERVER[\'HTTP_ACCEPT_LANGUAGE\'] verwenden, wenn keine Sprachvariable mitgegeben wurde
if ( NULL === $lang_variable )
$lang_variable = $_SERVER[\'HTTP_ACCEPT_LANGUAGE\'];
// wurde irgendwelche Information mitgeschickt?
if ( empty($lang_variable) )
return $default_language;
// Den Header auftrennen
$accepted_languages = preg_split(\'/,\\s*/\', $lang_variable);
// Die Standardwerte einstellen
$current_lang = $default_language;
$current_q = 0;
// Nun alle mitgegebenen Sprachen abarbeiten
foreach ($accepted_languages as $accepted_language) {
// Alle Infos dieser Sprache rausholen
$res = preg_match(
\'/^([a-z]{1,8}(?:-[a-z]{1,8})*)\'.
\'(?:;\\s*q=(0(?:\\.[0-9]{1,3})?|1(?:\\.0{1,3})?))?$/i\',
$accepted_language,
$matches
);
if (!$res)
continue;
// Sprachcode holen und dann sofort in die Einzelteile trennen
$lang_code = explode(\'-\', $matches[1]);
// Wurde eine Qualität mitgegeben?
if ( isset($matches[2]) )
$lang_quality = (float)$matches[2];
else
$lang_quality = 1.0;
// Bis der Sprachcode leer ist...
while (count ($lang_code)) {
// mal sehen, ob der Sprachcode angeboten wird
if (in_array ( strtolower( join(\'-\', $lang_code) ), $allowed_languages) ) {
// Qualität anschauen
if ($lang_quality > $current_q) {
$current_lang = strtolower( join(\'-\', $lang_code) );
$current_q = $lang_quality;
break;
}
}
// Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
if ($strict_mode)
break;
// den rechtesten Teil des Sprachcodes abschneiden
array_pop($lang_code);
}
}
return $current_lang;
}
$allowed_langs = array(\'en\', \'de\');
$lang = lang_get_from_browser($allowed_langs, \'en\', NULL, FALSE);
if ( \'de\' === $lang )
Header("Location: http://wpbasis.de/readme-de_DE.php");
else
Header("Location: http://wpbasis.de/readme-en_US.php");
exit();
?>