2

次のコードがあります。

<?php
// List of available localized versions as 'lang code' => 'url' map
$sites = array(
    "da" => "http://www.mysite.com/",
);

// Get 2 char lang code
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

// Set default language if a `$lang` version of site is not available
if (!in_array($lang, array_keys($sites)))
    $lang = 'en';

// Finally redirect to desired location
header('Location: ' . $sites[$lang]);
?>

これにより、デンマーク語の Web サイト クライアントの場合、ユーザーはメイン サイトであるデンマーク語 (da) バージョンのサイトにリダイレクトされます。これは素晴らしいです。

しかし、ユーザーがデンマーク語ではなく、ポーランド語、ドイツ語などの場合、サブドメインにある英語版のサイトにリダイレクトします

http://en.mysite.com/

それを既存のコードに実装するにはどうすればよいですか? 前もって感謝します!- フレデリック・アンデルセン

編集

次のような解決策;

$sites = array(
    "da" => "http://www.mysite.com/",
    "en" => "http://en.mysite.com/"
);

リダイレクト時にループ エラーが発生するため、少なくとも Google Chrome では機能しません。

編集2

session_start();
if (isset( $_SESSION['redirect']))
{
   // do nothing / continue with rest of page
}
else
{
   $_SESSION['redirect'] = true;

// List of available localized versions as 'lang code' => 'url' map
$sites = array(
    "da" => "http://www.mysite.com/",
    "en" => "http://en.mysite.com/"
);

// Get 2 char lang code
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

// Set default language if a `$lang` version of site is not available
if (!in_array($lang, array_keys($sites)))
    $lang = 'en';

// Finally redirect to desired location
header('Location: ' . $sites[$lang]);

   exit();
}
4

3 に答える 3

2

デフォルトのオプションを配列に追加する必要があります。

$sites = array(
    "da" => "http://www.mysite.com/",
    "en" => "http://en.mysite.com/"
);

編集:この同じコードを"http://en.mysite.com/"再度呼び出すと、ループが作成されます。明らかな解決策は、このコードをそこで呼び出さないことですが、別の解決策は、セッション変数を設定して、言語選択が既に行われていることを示すことです。

そのセッション変数を追加するには、次のようにします。

session_start();
if (isset( $_SESSION['redirect']))
{
   // do nothing / continue with rest of page
}
else
{
   $_SESSION['redirect'] = true;
   // your language selection code with header call
   exit();
}
于 2012-05-04T17:05:17.897 に答える
2
$sites = array(
    "da" => "http://www.mysite.com/",
    "en" => "http://en.mysite.com/"
);
于 2012-05-04T17:06:08.753 に答える
0

これはどう

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

    $sub_domain = ($lang == "da") ? "www" : "en";

    $link = "http://".$sub_domain.".mysite.com/";

    header('Location: ' . $link);
于 2012-05-04T17:19:18.713 に答える