1

私は最近、AcceptLanguage ヘッダーを表す複数の文字列を持つ配列を作成しようとしました。別のユーザー指定の言語を配列の先頭にプッシュして、優先度を最大にする必要があります。

これまでのところ、

function getRequestLangs(){
    //get languages from browser
    $accLangs = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);

    $requestedLanguages = array();
    foreach($accLangs as $key => $lang){

        $lang = substr($lang,0,2);
        // p is a quality param, we won't need it, since the
        // preferred languages are already sorted by default 
        if($lang != 'p='){
            array_push($requestedLanguages,$lang);
        }
    }
    // we only need each language once, this function keeps the order
    return array_unique($requestedLanguages);
}

ここで、ユーザー指定の言語を最初のキーとして追加したいと思います (言語がサポートされていない場合は、受け入れられている別の言語にフォールバックする可能性があります)

//language from path, pushed as first index (highest priority)
if(isset($_GET['lang']) && $_GET['lang'] != ""){
        $requestedLanguages = array_unshift($requestedLanguages,$_GET['lang']);
}

var_dump($requestedLanguages)array_unshift の前:

    array(2) { 
         [0]=> string(2) "de" 
         [2]=> string(2) "en" 
    } 

var_dump($requestedLanguages)array_unshift の後:

    int(3) 

0 と 2 の間のインデックス ホールと関係があるのではないかと思いますが、それは単なる推測です。

[編集] もっとカフェインが必要です...

//wrong:
$requestedLanguages = array_unshift($requestedLanguages,$_GET['lang']);

//right:
array_unshift($requestedLanguages,$_GET['lang']);
4

1 に答える 1