-1

ユーザーのブラウザー言語の結果に基づいてリダイレクトする HTTP_ACCEPT_LANGUAGE 関数を使用して、単純な if ステートメントを作成したいと考えています。私はまだ初心者なので、できるだけシンプルにしています。これは私がこれまでに持っているものですが、「if」ステートメントには作業が必要です。誰でも修正を手伝ってもらえますか?

<?php
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
if ($lang=german) {
    header("Location: http://www.example.com/german/index.html");
    } else if ($lang=spanish) {
        header("Location: http://www.example.com/spanish/index.html");
        }
        else if ($lang=french) {
            header("Location: http://www.example.com/french/index.html");
            }
            else if ($lang=chinese) {
                header("Location: http://www.example.com/chinese    /index.html");
                    } else {
                    echo "<html>english content</html>";
                    }

?>
4

5 に答える 5

4

私はあなたの言語リテラルが何であるかわからないので、それらをISO 言語コードにすると言います。

ステートメントを使用してswitchください。これは読みやすく、小さくなっています。

$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
switch($lang) {
    case "de-DE":
    case "es-ES":
    case "cn-CN":
    case "fr-FR":
        header("Location: http://www.example.com/$lang/index.html");
        break;
    default:
        header("Location: http://www.example.com/en-US/index.html");
        break;
}

さらに、比較ではなく割り当てを行っています。と比較し==ます:

if ($lang == "de-DE")
于 2013-08-07T08:42:47.493 に答える
1

常に /language/ にリダイレクトすると仮定すると、次のようにすることができます。

<?php 
    $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    if ( in_array( $lang,array("german","spanish","french","chinese") ) ) {
       header("Location: http://www.example.com/$lang/index.html");
    } else {
        echo "<html>english content</html>";
    }

?>

ifまた、で行う必要がある比較は、==それ以外の場合は代入です!

于 2013-08-07T08:42:45.503 に答える
0

HTTP_ACCEPT_LANGUAGE は "english" ではなく、"en" のような 2 つの記号記号、または "en_us" のような地域と言語の記号を返します。読みにくい if 文は使用しないでください。配列を使用する必要があります(将来的には、構成ファイルに簡単に書き込むか、データベースに移動できます)。適切なコードは次のようになります。

$default_lang = 'en';
$lang_redirectors = array('de' => 'http://www.example.com/german/index.html', 
                          'en' =>   'http://www.example.com/english/index.html');
function redirect($url){
    header("Location: " . $url);
}

$hal = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$langs = explode($hal, ',');

foreach($langs as $lang){
    $lang_prefix = substr($lang, 0, 2);
       if(in_array($lang_prefix, $lang_redirectors)){
           redirect($lang_redirectors[$lang_prefix]);
           break;
       }
    redirect($lang_redirectors[$default_lang]);
}
于 2013-08-07T08:45:16.743 に答える