php - PHP语言检测

我正在尝试建立多语言站点。

我使用这段代码来检测用户的语言。如果您尚未选择语言,它将包括基于HTTP_ACCEPT_LANGUAGE的语言文件。

我不知道从哪里得到的:

session_start();

if (!isset($_SESSION['lang'])) {
   $_SESSION['lang'] = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}

elseif (isset($_GET['setLang']) && $_GET['setLang'] == 'en') $_SESSION['lang'] = "en";
elseif (isset($_GET['setLang']) && $_GET['setLang'] == 'sv') $_SESSION['lang'] = "sv";
elseif (isset($_GET['setLang']) && $_GET['setLang'] == 'pl') $_SESSION['lang'] = "pl";
elseif (isset($_GET['setLang']) && $_GET['setLang'] == 'fr') $_SESSION['lang'] = "fr";

include('languages/'.$_SESSION['lang'].'.php');

它对我有用,并包含波兰语lang文件。但是这段代码正确吗?还是有另一种方法?

最佳答案

浏览器通常会发送一个HTTP header ,名称为Accept-Language,它指示用户愿意使用的语言。

例如,此 header 可以是:

Accept-Language: en-us,en;q=0.5

其中有优先权的概念,顺便说一句;-)

在PHP中,您可以在 $_SERVER super global中获得它:
var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']);

会得到我的:
string 'en-us,en;q=0.5' (length=14)

现在,您必须解析;-)

如果我在浏览器的选项中编辑了自己的偏好设置,说:“我想要法语,并且如果您不能为我提供法语,请从美国那里获取英语;如果您也不能得到我,那么请获取我英文),标题为:
Accept-Language: fr-fr,en-us;q=0.7,en;q=0.3

并且,从PHP:
string 'fr-fr,en-us;q=0.7,en;q=0.3' (length=26)

有关更多信息,您可以看看 section 14.4 of the HTTP RFC

您可能会在PHP中找到很多代码示例来解析该 header ;例如: Parse Accept-Language to detect a user's language

玩得开心 !