正确的方法是查看发送到服务器的 HTTP 接受语言标头。这包含用户已配置其浏览器首选语言的有序加权列表。
不幸的是,这个头文件不能在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中包含指向该外部服务的<脚本src>并使用JavaScript解析语言标头。但是,我不知道有任何现有的库代码可以执行此操作,因为接受语言解析几乎总是在服务器端完成。
无论你最终做什么,你肯定需要一个用户覆盖,因为它总是会对某些人猜错。通常,最简单的方法是将语言设置放在URL中(例如 http://www.example.com/en/site 与 http://www.example.com/de/site),并让用户单击两者之间的链接。有时,您确实希望两种语言版本都使用单个URL,在这种情况下,您必须将设置存储在cookie中,但这可能会使不支持cookie和搜索引擎的用户代理感到困惑。