将默认语言设置为英语

时间:2012-10-05 08:29:31

标签: php get default lang

我正在使用这个脚本:

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
switch ($lang){
    case "nl":
        //echo "PAGE FR";
        include("talen/nl.php");//include check session FR
        break;
    case "es":
        //echo "PAGE IT";
        include("talen/es.php");
        break;
    case "en":
        //echo "PAGE EN";
        include("talen/en.php");
        break;        
    default:
        //echo "PAGE EN - Setting Default";
        include("talen/en.php");//include EN in all other cases of different lang detection
        break;
}

但是当我将浏览器语言设置为“af”时,它并没有获得默认的英语语言......

我怎样才能实现这一目标?

编辑:

因为我没有“af”的情况,所以没有显示任何内容......

当没有像“af”这样的情况时,我希望默认为“en”但不起作用

EDIT2:

我现在正在使用它:

<?
$accept_lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$accept_lang = str_replace(' ', '', $accept_lang);

$arr = explode(',', $accept_lang);

$lang = "en";
$q = 0;

if (count($arr) > 0) {
    foreach ($arr as $a) {
    $l = explode(';', $a);

    if (count($l) == 1) {
        $l[1] = 'q=1';  
    }

    $l[1] = str_replace('q=', '', $l[1]);

    if ($l[1] > $q) {
        $q = $l[1];
    $lang = $l[0];  
    }
}
}

$lang = preg_replace('/-(.*)/', '', $lang);

switch ($lang){
    case "nl":
        //echo "PAGE FR";
        include("talen/nl.php");//include check session FR
        break;
    case "es":
        //echo "PAGE IT";
        include("talen/es.php");
        break;
    case "en":
        //echo "PAGE EN";
        include("talen/en.php");
        break;        
    default:
        //echo "PAGE EN - Setting Default";
        include("talen/en.php");//include EN in all other cases of different lang detection
}
?>

但我的$ lang仍然设置为“af”而不是默认的“en”

编辑3:

感谢您的帮助:

当我尝试使用它时:

print $_SERVER['HTTP_ACCEPT_LANGUAGE'];
switch ($lang){
    case "nl":
        //echo "PAGE FR";
        print("nl");//include check session FR
        break;
    case "es":
        //echo "PAGE IT";
        print("es");
        break;
    case "en":
        //echo "PAGE EN";
        print("en");
        break;        
    default:
        //echo "PAGE EN - Setting Default";
        print("en");//include EN in all other cases of different lang detection
        break; 
}

打印出来:

af,nl; q = 0.8,en; q = 0.5,en-us; q = 0.3en

但我还是“af”..怎么样

只是为了让你知道...我把我的浏览器语言设置为“af”来测试它...只是你知道...但它应该加载你的sript的默认值...

2 个答案:

答案 0 :(得分:1)

您应该使用我之前写过的这样的脚本,它会检查具有最佳数量值的语言:

$accept_lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$accept_lang = str_replace(' ', '', $accept_lang);

$arr = explode(',', $accept_lang);

$lang = 'en';
$q = 0;

if (count($arr) > 0) {
    foreach ($arr as $a) {
    $l = explode(';', $a);

    if (count($l) == 1) {
        $l[1] = 'q=1';  
    }

    $l[1] = str_replace('q=', '', $l[1]);

    if ($l[1] > $q) {
        $q = $l[1];
    $lang = $l[0];  
    }
}
}

$lang = preg_replace('/-(.*)/', '', $lang);

然后你可以像你一样切换()$lang

忽略默认情况下的break;

修改

我将$lang = 'de';更改为$lang = 'en';。如果HTTP_ACCEPT_LANGUAGE为空,则这是默认语言。

答案 1 :(得分:-2)

试着想一想。从默认情况下删除 break;