在浏览器中确定用户区域设置的最佳方法
我有一个网站(Flash)本地化到十几种语言,我想根据用户的浏览器设置自动定义一个默认值,以尽量减less访问内容的步骤。
仅供参考,由于代理限制,我无法使用服务器脚本,所以我想JavaScript或ActionScript是适合解决问题的。
问题:
-
什么是最好的方法来猜测用户的语言环境?
-
是否有任何现有的简单的类/function可以帮助我(没有复杂的本地化包)? 特别是要巧妙地将所有可能的语言分解成更小的数字(我有翻译)。
-
我可以相信这样的解决scheme?
-
任何其他解决方法或build议?
提前致谢!
正确的方法是查看发送到服务器的HTTP Accept-Language头。 这包含用户configuration其浏览器更喜欢的有序,加权语言列表。
不幸的是,这个头文件不能在JavaScript里面读取; 所有你得到的是navigator.language
,它告诉你什么本地化版本的网页浏览器安装。 这不一定与用户的首选语言相同。 在IE浏览器上,你会得到systemLanguage
(操作系统安装的语言), browserLanguage
( language
相同)和userLanguage
(用户configuration的操作系统区域),这些都是同样无益的。
如果我必须在这些属性之间进行select,那么我会首先嗅探userLanguage
,然后回到language
然后才能看到browserLanguage
,最后是systemLanguage
(如果那些语言不匹配)。
如果你可以把一个服务器端脚本放在networking的其他地方,它只读取Accept-Language头文件,并将其作为一个带有string头部值的JavaScript文件返回,例如:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
那么你可以在HTML中包含指向外部服务的<script src>,并使用JavaScript来parsing语言头文件。 我不知道任何现有的库代码来做到这一点,因为接受语言parsing几乎总是在服务器端完成。
无论你最终做什么,你当然需要一个用户覆盖,因为它总是会猜对某些人错误。 通常,将语言设置放入url(例如,http://www.example.com/en/site vs http://www.example.com/de/site)是最容易的,并让用户点击两者之间的联系。 有时候,您确实希望为这两种语言版本创build一个URL,在这种情况下,您必须将设置存储在Cookie中,但这可能会使用户代理不支持Cookie和search引擎。
本文build议浏览器的导航器对象的以下属性:
- navigator.language(Netscape – 浏览器本地化)
- navigator.browserLanguage(特定于IE的浏览器本地化语言)
- navigator.systemLanguage(IE专用 – Windows操作系统 – 本地化语言)
- navigator.userLanguage
把这些变成一个javascript函数,在大多数情况下,你应该能够猜出正确的语言。 一定要优雅地退化,所以有一个包含您的语言select链接的div,以便如果没有JavaScript或方法不起作用,用户仍然可以决定。 如果确实有效,只需隐藏div。
在客户端执行此操作的唯一问题是要么将所有语言提供给客户端,要么必须等到脚本运行并在请求正确版本之前检测到语言。 也许提供最stream行的语言版本作为默认会刺激最less的人。
编辑:我会第二伊万的cookiesbuild议,但要确保用户可以随时更改语言; 不是每个人都喜欢他们的浏览器默认的语言。
在Chrome和Firefox 32+上,navigator.languages包含用户首选项的语言环境数组,并且比navigator.language更精确,但要使其向后兼容(经过testing的Chrome / IE / Firefox / Safari),然后使用这个:
function getLang() { if (navigator.languages != undefined) return navigator.languages[0]; else return navigator.language; }
对于Flash你有flash.system.Capabilities.language
– 考虑操作系统语言检测 猜测 approprieate语言环境。
在地址栏中键入:about:config,然后在页面上search“general.useragent.locale”其他用法: https : //addons.mozilla.org/en-US/firefox/addon/quick-locale-switcher /