php设置accept,PHP或htaccess通过Accept-Language重写URL?
我在PHP中這樣做。接受語言是一件復雜的事情。瀏覽器可以建議它想要接受的多種語言(每種語言都有一個顯示它更喜歡的品質因子)。
不幸的是,我的網站只有主要語言(EN,ES,FR)的翻譯,而不是(en_US,en_GB,es_MX,es_ES),因此我選擇了這些主要語言中指定的最高質量因子。
下面是一個未經測試的編輯,它應該從我的代碼中刪除大多數或所有依賴項。對不起,事情讓我以前的答案感到困惑。我對我的函數進行了幾次調用,并在其他地方進行了一些語言檢查。下面的代碼應該設置會話語言變量,您應該在其他地方使用它來確定正確的翻譯。
它似乎比我以前的答案復雜得多,我不得不在我自己的代碼中實現它。對于需要特定翻譯(EN_US,EN_GB)的人,應修改以下代碼以考慮preg_match_all中的匹配2。
$websiteLanguages = array('EN', 'ES');
session_start();
// The user wants a specific language regardless of their accept settings.
if (isset($_GET["lang"]))
{
$_SESSION["language"] = $_GET["lang"];
return;
}
// A language has already been decided upon.
if (isset($_SESSION["language"]))
{
return;
}
// No language has been chosen we should choose from the accept language.
if (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})' . // M1 - First part of language e.g en
'(-[a-z]{1,8})*\s*' . // M2 -other parts of language e.g -us
// Optional quality factor M3 ;q=, M4 - Quality Factor
'(;\s*q\s*=\s*((1(\.0{0,3}))|(0(\.[0-9]{0,3}))))?/i',
$_SERVER['HTTP_ACCEPT_LANGUAGE'],
$langParse);
$langs = $langParse[1]; // M1 - First part of language
$quals = $langParse[4]; // M4 - Quality Factor
$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
// langArr will now be an array like: array('EN' => 1, 'ES' => 0.5)
arsort($langArr, SORT_NUMERIC);
// The languages the client accepts in order of preference.
$acceptedLanguages = array_keys($langArr);
// Set the most preferred language that we have a translation for.
foreach ($acceptedLanguages as $preferredLanguage)
{
if (in_array($preferredLanguage, $websiteLanguages))
{
$_SESSION['Language'] = $preferredLanguage;
return;
}
}
}
// We will have returned by now if a language could be chosen, otherwise use
// our default language.
$_SESSION['Language'] = "EN";
總結
以上是生活随笔為你收集整理的php设置accept,PHP或htaccess通过Accept-Language重写URL?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打破业内记录!华为P60后壳、Mate
- 下一篇: 动态规划算法php,php算法学习之动态