繁体   English   中英

使用接受语言标题来猜测用户的国家/地区(如果可用)

[英]Using accept language header to guess user's country, if available

我想使用 Javascript/PHP 来确定用户的浏览器是否在接受语言标头中定义了国家/地区(区域设置变体)。

知道 accept-language 标头值的内容可能会有所不同,并且并不总是准确的,有没有办法从逻辑上确定某个国家/地区是否存在于 accept-language 标头字符串中? 然后通过JS提取它?

例如,如果用户的接受语言标头包含 en-US,我想设置一个局部变量 =“US”。

我最初的想法是创建一个包含所有接受头语言和区域设置值的非常大的数组并进行检查,但这似乎不是一种非常有效的方法。

Accept-Language标头有几种可以采用的格式, 请参阅 MDN 上的文档 将首选语言作为结构化列表(如按 q-factor 排序的数组)只是以一种对标头值的所有可能排列具有弹性的方式解析该列表的问题。

与其尝试自己编写此逻辑,不如使用为此确切目的构建的库更简单,这将更好地处理各种奇怪的边缘情况。 例如, willdurand/Negotiation允许您解析Accept-Language标头并将其与站点支持的区域设置列表相匹配,以找到要使用的最佳语言。

您必须在服务器端(在 PHP 中)执行此操作。 一旦您了解了该语言,您就可以通过多种方式将其传递给客户端 JavaScript。 例如,您可以使用JS 标记在您的页面模板中包含一段 JavaScript,它使用确定的语言设置全局变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM