在PHP中检测浏览器语言并重定向

时间:2013-08-07 08:35:52

标签: php

我想使用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>";
                    }

?>

5 个答案:

答案 0 :(得分:2)

我不知道你的语言文字是什么,所以我会说他们ISO language codes

使用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")

答案 1 :(得分: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中的比较需要使用==完成,否则就是另外的分配!

答案 2 :(得分:1)

<?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");
}

?>

答案 3 :(得分: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');
}
?>

答案 4 :(得分:0)

HTTP_ACCEPT_LANGUAGE不是“英语”,而是两个符号,如“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]);
}