-1

我想使用 HTTP_ACCEPT_LANGUAGE 函数编写一个简单的 if 语句,该函数根据用户浏览器语言的结果进行重定向。我仍然是初学者,所以显然要尽可能简单。这是我到目前为止所拥有的,但“if”语句需要工作。任何人都可以帮我解决问题吗?

<?php
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
if ($lang=german) {
    header("Location: http://www.example.com/german/index.html");
    } else if ($lang=spanish) {
        header("Location: http://www.example.com/spanish/index.html");
        }
        else if ($lang=french) {
            header("Location: http://www.example.com/french/index.html");
            }
            else if ($lang=chinese) {
                header("Location: http://www.example.com/chinese    /index.html");
                    } else {
                    echo "<html>english content</html>";
                    }

?>
4

5 回答 5

4

我不知道你的语言文字是什么,所以我会说让它们成为ISO 语言代码

使用switch语句,这样更易​​读,更小:

$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
switch($lang) {
    case "de-DE":
    case "es-ES":
    case "cn-CN":
    case "fr-FR":
        header("Location: http://www.example.com/$lang/index.html");
        break;
    default:
        header("Location: http://www.example.com/en-US/index.html");
        break;
}

此外,您是在分配,而不是比较。你比较==

if ($lang == "de-DE")
于 2013-08-07T08:42:47.493 回答
1

假设你总是重定向到 /language/,你可以这样做:

<?php 
    $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    if ( in_array( $lang,array("german","spanish","french","chinese") ) ) {
       header("Location: http://www.example.com/$lang/index.html");
    } else {
        echo "<html>english content</html>";
    }

?>

此外,您if需要进行比较==,否则是分配!

于 2013-08-07T08:42:45.503 回答
0

HTTP_ACCEPT_LANGUAGE 返回的不是“english”,而是两个符号,如“en”,或区域和语言符号,如“en_us”。您不应该使用难以阅读的 if 语句。您应该使用数组(将来您可以简单地将其写入配置文件,或移动到数据库)。正确的代码应如下所示:

$default_lang = 'en';
$lang_redirectors = array('de' => 'http://www.example.com/german/index.html', 
                          'en' =>   'http://www.example.com/english/index.html');
function redirect($url){
    header("Location: " . $url);
}

$hal = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$langs = explode($hal, ',');

foreach($langs as $lang){
    $lang_prefix = substr($lang, 0, 2);
       if(in_array($lang_prefix, $lang_redirectors)){
           redirect($lang_redirectors[$lang_prefix]);
           break;
       }
    redirect($lang_redirectors[$default_lang]);
}
于 2013-08-07T08:45:16.743 回答
0

尝试这个:

<?php
$path = array(
    'en-US' => 'english',
    // etc
);
$accepts = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
if (in_array($accepts[0], $path)) {  // if path exists for language then redirect to path, else redirect to default path (english)
    header('Location: http://www.example.com/' . $path[$accepts[0]] . '/index.html');
} else {
    header('Location: http://www.example.com/english/index.html');
}
?>
于 2013-08-07T08:41:11.303 回答
0
<?php
$browserlang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lang = $browserlang[0] . $browserlang[1] . $browserlang[2] . $browserlang[3] . $browserlang[4];


if (($lang=="sk_SK") OR ($lang=="sk-SK")) {
    header("Location: https://www.example.sk/sk");
}
else if (($lang=="en_EN") OR ($lang=="en-EN") OR ($lang=="en_GB") OR ($lang=="en_US") OR ($lang=="en-GB") OR ($lang=="en-US"))  {
    header("Location: https://www.example.sk/en");
}
else {
    header("Location: https://www.example.sk/en");
}

?>
于 2017-02-23T12:59:22.373 回答