我设置了我的网站,因此我只需添加“?lang = en”或“?lang = es”即可更改英语/西班牙语。PHP或htaccess通过Accept-Language重写URL?
当我进入网站时,例如“http://domain.com/something/something_else?lang=es”,设置了一个cookie,以便继续以该语言浏览网站。
我想首先通过浏览器的“接受语言”值重定向我的用户,但如果他们愿意,可以让他们继续以其他语言浏览网站。
什么是最好的方法来做到这一点? .htaccess会与选择语言时设置的cookie一起工作吗?
编辑:这是我更新的代码与保罗回答:
EDIT2:哦,我只是有“恩”和“ES”的语言。我不知道这个代码wpuld如何只选择之间的两个或设置默认...:/
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");
感谢保罗..我更新了我的问题与您的代码,但我不太确定如何使用它。我在PHP编码方面很新,你能检查我做错了什么吗?无论如何,感谢您分享您的代码! – Santiago
解析语言接受头文件的相关PHP函数我在这里写入了一个更长的答案:[301页主页上seo和侦探浏览器语言的更好方法](http:// stackoverflow。COM /问题/ 8091296 /什么 - 是 - 一 - 更好的方式换搜索引擎优化和侦探浏览器的语言为-301家庭页/ 8091897#8091897) – hakre