正确的方法是查看发送到服务器的 HTTP Accept-Language标头。这包含用户已将其浏览器配置为首选的语言的有序加权列表。
不幸的是,这个头文件不能在 JavaScript 中读取;您所得到的只是navigator.language
,它会告诉您安装的 Web 浏览器的本地化版本。这不一定与用户的首选语言相同。在 IE 上,您会得到systemLanguage
(操作系统安装的语言)、browserLanguage
(与 相同language
)和userLanguage
(用户配置的操作系统区域),这些都同样没有帮助。
如果我必须在这些属性之间进行选择,我会先嗅探userLanguage
,然后回到language
并且仅在此之后(如果那些与任何可用语言不匹配)查看browserLanguage
和最后systemLanguage
。
如果您可以将服务器端脚本放在网络上的其他位置,该脚本只需读取 Accept-Language 标头并将其作为 JavaScript 文件吐出,并在字符串中包含标头值,例如:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
那么您可以在 HTML 中包含一个指向该外部服务的 <script src>,并使用 JavaScript 来解析语言标头。不过,我不知道有任何现有的库代码可以执行此操作,因为 Accept-Language 解析几乎总是在服务器端完成。
无论你最终做什么,你肯定需要一个用户覆盖,因为它总是会为某些人猜错。通常最简单的方法是将语言设置放在 URL 中(例如 http ://www.example.com/en/site vs http ://www.example.com/de/site),然后让用户点击两者之间的联系。有时您确实需要两种语言版本的单一 URL,在这种情况下,您必须将设置存储在 cookie 中,但这可能会混淆不支持 cookie 和搜索引擎的用户代理。