0

私は 3 つの言語で作成された Web サイトを持っていますが、(おそらく) 拡張される予定です。そこで、ウェブサイトの言語を挿入するデータベースにテーブルを作成しました。

index.php としてスクリプトがあります。検出された URI が「/」の場合、スクリプトは /language/index.php にリダイレクトします。

HTTP_ACCEPT_LANGUAGE に基づいて動的にリダイレクトするスクリプトが必要です。私の問題は、私が作成した次のスクリプトが最初の foreach 実行でのみ機能することです。

$abbr = $link->query("SELECT abbr AS langs FROM LANGS");
while($langs_db = mysqli_fetch_array($abbr)){
    $site_langs[] = $langs_db['langs'];
}

$client_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

foreach($site_langs as $lang){
    switch($client_lang){
        case $client_lang == $lang:
            header("location: http://www.mysite.com/$lang/index.php");
        break;

        default:
            header("location: http://www.mysite.com/$lang/index.php");
        break;
    }
}

私は次のような解決策を考えました:

case $client_lang == $lang:
    $find "location: http://www.mysite.com/$lang/index.php";
    break;

default:
    $not_find = "location: http://www.mysite.com/$lang/index.php";
    break;

その後:

  if($find != ''){
       header($find);
  }else{
       header(not_find);
  }

しかし、これが良いアイデアかどうかはわかりません...

ありがとうございました!

4

1 に答える 1

0
// Set the default language as a fall back
$default_lang='en';

// Have an array with all languages your site supports
$langs=array('en', 'es', 'pt', /* etc... */);

// Query the browser's first preferred language
$client_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

// See if the language is supported otherwise redirect use the default one
$client_lang = (in_array($client_lang, $langs) ? $client_lang : $default_lang);
header("Location: /$client_lang/index.php");

別の方法として、gettext を検討することもできます。

http://php.net/manual/en/book.gettext.php

于 2013-05-24T23:01:27.547 に答える