【问题标题】:What information do browsers use to create the Accept-Language string?浏览器使用什么信息来创建 Accept-Language 字符串?
【发布时间】:2015-03-12 09:31:21
【问题描述】:

我正在尝试尽可能多地获取有关用户访问网站的区域信息。使用例如将 IP 映射到国家/地区ipinfo.io 是一种方法,但我也在探索 Accept-Language 标头。在 PHP 中使用 HTTP_ACCEPT_LANGUAGE 获取此信息。我想问一下是否有人知道这实际上是如何计算的?我知道这取决于浏览器,并且实现方式因浏览器而异,但是是否有一些可用的文档或关于此的有趣文章?

我使用的是 Linux,我的操作系统语言是英语,我的键盘布局是瑞典语。对于 Chrome,我看到了这个字符串:

en-US,en;q=0.8,nl;q=0.6,sv;q=0.4

这表明我对英语和瑞典语感兴趣,这是有道理的,但是那里也有荷兰语,这可能来自哪里?

对于 Firefox,我只看到:

en-US,en;q=0.5

有人对此进行过更多研究吗?有关如何获取有关网站访问者的区域信息的任何其他提示或方法?

谢谢!

【问题讨论】:

    标签: google-chrome http firefox locale


    【解决方案1】:

    这可能取决于浏览器和平台。在 unix 类型的操作系统上,您可以使用 locale 命令找到系统区域设置:

    $ locale
    LANG="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_CTYPE="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_ALL=
    

    您也可以使用相同的命令或通过 OSX 系统偏好设置应用程序进行设置。浏览器可能会默认为系统区域设置,但它们中的大多数也会为用户提供一种在浏览器中更改其偏好的方式。请参阅http://www.w3.org/International/questions/qa-lang-priorities.en.php 以获得良好的概述。

    下面是一些看起来与设置实际接受语言标头相关的 chrome 代码:https://code.google.com/p/chromium/codesearch#chromium/src/ui/base/l10n/l10n_util.cc&q=AcceptLanguage&sq=package:chromium&type=cs&l=856

    这是一个与接受语言标头相关的 Firefox 错误报告,其中包含许多有趣的讨论以及与设置标头相关的差异链接:https://bugzilla.mozilla.org/show_bug.cgi?id=1054739

    这是一篇 Mozilla 开发人员文章,其中提供了有关接受语言标头和一些相关标头的一些详细信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation

    最终,accept-language 是由用户控制的(并且有很多浏览器扩展可以快速修改它),因此虽然检测用户的语言偏好很有用,但它并不一定会告诉您有关他们位置的任何信息。您可以将其与其他信息(例如用户的时区(可从 javascript 获得))结合起来,但如果您真的想要位置信息,那么像 http://ipinfo.io 这样的信息是您最好的选择。

    【讨论】:

      猜你喜欢
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      相关资源
      最近更新 更多