-1

私はこのスクリプトを使用しています:

$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」にしたいのですが、うまくいきません

編集2:

私は今これを使用しています:

<?
$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 はまだデフォルトの「en」ではなく「af」に設定されています

編集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でデフォルトをロードする必要があります...

4

2 に答える 2

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);

その後、あなたがしたように switch() することができ$langます。

break;ただし、default: のケースは省略してください。

編集

に変更$lang = 'de';しました$lang = 'en';。これは、HTTP_ACCEPT_LANGUAGEが空の場合に使用されるデフォルトの言語です。

于 2012-10-05T08:43:01.327 に答える
-2

ひとつだけ考えてみてください。ブレークを削除します。デフォルトのケースから。

于 2012-10-05T08:35:29.973 に答える