http - 网站(Google 和/或您)应该如何处理 Accept-Language header ?

标签 http localization

很长一段时间以来,我一直对谷歌在以下情况下的行为不满意,并且在不小心注意到 80+ other people 之后有同感(并且有 20 多人支持 Google 错误报告的想法)我认为利用 SO 在 HTTP 协议(protocol)和网络文化方面的智慧很有用。

每次我去不同的国家并从笔记本电脑访问 google.com 或安装新浏览器时,都会出现此行为。在包括越南在内的许多国家/地区,Google 会自动重定向到本地化版本(例如 google.com.vn ),这是我实际上看不懂的版本,因此我绝望地扫描它以尝试找到英文版的 Google.com 链接。

第一次发生这种情况时,我感到很困惑,并花了一些时间找出我的请求 header 可能出了什么问题;如我所料,我的 Accept-Language 始终是 en-US 或类似 en-US,ru;q=0.5 的内容。对不同 IP 的进一步测试证实,即使您已登录,它们也会进行 IP 地理定位。后来我了解到有一个语言查询 ?hl=...,但仍然如此。

那么,我的问题是:您认为从网络文化角度来看,这是合理且预期的行为吗?其他网站也这样做吗? 如果您要设计一个多语言网站,您会如何处理来自 .vn IP 但使用 en-US 语言的人?

我想有不同的 IP 地理定位方法:

  • contra:我认为这是不礼貌的:我明确告诉你我想要什么, 给我别的东西有什么好处?

  • pro: 可能是刚安装了默认语言包的浏览器,对Accept-* header一无所知,仍然会更喜欢查看网站的本地化版本。

  • contra:然而,非技术人员可以通过安装语言包轻松更改接受语言。事实上,如果您去下载 Firefox,您很可能会下载您想要的语言版本,并带有符合您意愿的接受语言 header 。

请注意,我阅读了 HTTP 1.1 specification从 1999 年开始,但他们似乎忽略了多少 Accept-Language 的问题应该真正考虑在内。

我认为这个问题属于 SO 作为网络应用程序设计问题。而且我仍在考虑提交正式的错误报告(如果我认为这种行为与网络标准相去甚远的话)。

最佳答案

我认为这里确实有两个不同的问题在起作用。语言和国家。它们绝对不是同一回事。 HTTP 规范将 Accept-Language 请求 header 字段明确定义为语言 说明符,而不是国家/地区说明符。

例如:en-US 指的是一种特定的语言(主要在美国使用的英语版本),en-GB 指的是另一种语言(主要在英国使用的英语版本)。这实际上与您目前在世界上的位置无关,它只是定义了您在浏览网站时最能接受的语言。这应该得到尊重,因为即使是新手用户也应该有一个使用他们语言的浏览器,默认情况下会发送正确的请求 header 字段。

但这并不是网站传统上使用它的方式。像另一位发帖人一样,我注意到网站将语言等同于国家/地区,并根据该国家/地区独特的政治限制/自由/公司在那里提供的产品定制网站,不一定针对语言。给出的例子是一家公司不在特定国家/地区销售特定产品,但在其他国家/地区销售。

在为不同的国家展示什么产品的情况下,地理定位 IP 地址会比根据语言做出决定更好,但它仍然不是完美的。如果我暂时在另一个国家/地区但想订购一些东西并将其送回国内怎么办?如果我的 IP 地址不能反射(reflect)我的实际位置怎么办?这不是完美的吗?

是的,大多数时候事情对大多数人来说都是正常的。但是,到底为什么要让人们很难以他们要求的语言访问该网站?这只是糟糕的 UI 设计。

关于http - 网站(Google 和/或您)应该如何处理 Accept-Language header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1020494/

相关文章:

.net - 哪个 .NET 类将多个 HTTP cookie 字符串解析为 CookieCollection 或 CookieContainer?

java - HttpURLConnection 收到 405 但服务已完成

ios - 如何在代码中提取由 stringsdict 文件本地化的参数?

regex - 如何在 swift 项目中查找非本地化字符串

java - 如何在android中读取带有土耳其字符的文本文件?

java - Resttemplate在接收响应之前如何确定响应的状态码?

ajax - ESP8266 同时请求多个 HTTP GET

c# - 本地化组名

http - 最佳 HTTP 请求分析器

android - 跨 Android 项目共享/移动本地化字符串