0

ユーザーが自分のサイトが表示される言語を変更できるPHPスクリプトがあります。私のスクリプトはブラウザの言語を調べ、サイトが自分の言語で利用できる場合は表示しますが、デフォルトの言語で利用できない場合は表示します。英語で表示します。また、Cookieを使用して言語を設定することを選択した場合、スクリプトはCookieで定義された言語も使用可能であることを確認します。

ただし、このスクリプトは現在、少し長めに見えます。同じ機能を維持しながら、それを単純化できる方法はありますか?

$u=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
if(in_array($u,array('de','es','fr','ja','nl','pt','zh'))){
$l=$u;
}else{
$l='en';
}

if(isset($_COOKIE['language'])){
if(in_array($_COOKIE['language'],array('de','en','es','fr','ja','nl','pt','zh'))){
$l=$_COOKIE['language'];
}
}

私が説明しようとしていることを人々が理解してくれることを願っています。

4

2 に答える 2

1

これはどう?

$u = isset($_COOKIE['language']) ? $_COOKIE['language'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

if (in_array($u, array('de','es','fr','ja','nl','pt','zh'))) {
  $l = $u;
} else {
  $l = 'en';
}

ちなみに、編集を容易にするために、許可された言語を含む配列を「config」ファイル(常に含まれるファイル)に含めると便利な場合があります。

[編集] これを少し遅くすることにしましたが、1行にしたい場合は:

$l = in_array(($u = isset($_COOKIE['language']) ? $_COOKIE['language'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)), array('de','es','fr','ja','nl','pt','zh')) ? $u : 'en';
于 2012-06-02T14:00:56.040 に答える
0

ローカリゼーションテンプレートを適切にロードできるように、出力をブラウザに送信する前に言語チェックを実行する必要があります。を使用しglobal $variable;て言語を保存できます。Cookieは必要ありません。

global $user_language;
$valid_languages = array('de', 'es', 'fr', 'ja', 'nl', 'pt', 'zh');
if ( in_array( substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2), $valid_languages) )
{
    $user_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
} else {
    $user_language = 'en';
}

この後$user_language、ローカリゼーションをロードして使用するときにユーザーが設定されている言語を確認するために使用します。

于 2012-06-02T13:59:25.030 に答える