サイトを設定したので、英語/スペイン語の言語を変更するには、「?lang = en」または「?lang=es」を追加する必要があります。
たとえば、「http://domain.com/something/something_else?lang=es」を使用してサイトにアクセスすると、Cookieが設定されるため、その言語でサイトをナビゲートし続けます。
最初にブラウザの「Accept-Language」値でユーザーをリダイレクトしたいのですが、必要に応じて、引き続き他の言語でサイトをナビゲートできるようにします。
それを行うための最良の方法は何でしょうか?.htaccessは、言語が選択されたときに設定されるCookieと一緒に機能しますか?
編集:これがポールの答えで私の更新されたコードです:
EDIT2:ああ、私は「en」と「es」の言語を持っています。このコードwpuldがこの2つだけを選択する方法、またはデフォルトを設定する方法がわかりません...:/
if (isset($_GET["lang"]))
$this->setLanguage($_GET["lang"]);
elseif (isset($_COOKIE["language"]))
$this->setLanguage($_COOKIE["language"]);
elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
// Parse the Accept-Language according to:
// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
preg_match_all(
'/([a-z]{1,8})' . // First part of language e.g en
'(-[a-z]{1,8})*\s*' . // other parts of language e.g -us
// Optional quality factor
'(;\s*q\s*=\s*((1(\.0{0,3}))|(0(\.[0-9]{0,3}))))?/i',
$_SERVER['HTTP_ACCEPT_LANGUAGE'],
$langParse);
$langs = $langParse[1];
$quals = $langParse[4];
$numLanguages = count($langs);
$langArr = array();
for ($num = 0; $num < $numLanguages; $num++)
{
$newLang = strtoupper($langs[$num]);
$newQual = isset($quals[$num]) ?
(empty($quals[$num]) ? 1.0 : floatval($quals[$num])) : 0.0;
// Choose whether to upgrade or set the quality factor for the
// primary language.
$langArr[$newLang] = (isset($langArr[$newLang])) ?
max($langArr[$newLang], $newQual) : $newQual;
}
// sort list based on value
arsort($langArr, SORT_NUMERIC);
$acceptedLanguages = array_keys($langArr);
$preferredLanguage = reset($acceptedLanguages);
$this->setLanguage($preferredLanguage);
}
else
$this->setLanguage("en");