日语网站为什么会以日语显示

访问国外网站时,有时会自动以中文显示。反过来,从国外访问中国网站时,可能会显示英文。网站是如何判断你的语言的呢?

实际上,你的浏览器在每次访问时都会向服务器发送"我说中文"这样的信息。了解这个机制后,你就能理解为什么有时会显示错误的语言,以及这与隐私有什么关系。

Accept-Language 头 - 浏览器发送的语言名片

网站判断语言最基本的方法是 HTTP 请求中包含的 Accept-Language 头。

例如,中文环境的浏览器会发送如下头信息:

Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

这表示"简体中文最优先(q=1.0,省略时的默认值),其次是中文(q=0.9),然后是美式英语(q=0.8),最后是英语(q=0.7)"。q 被称为品质值(quality value),用 0 到 1 的范围表示语言的优先级。

Web 服务器读取这个头信息,从可提供的语言中选择优先级最高的返回响应。本站也使用同样的机制,根据你浏览器的设置在日语、英语、中文、西班牙语之间切换。

通过 IP 地址进行地理推断

当仅靠 Accept-Language 头不够时,网站会结合 GeoIP(从 IP 地址推断地理位置的技术)来判断。

如果从中国的 IP 地址访问就显示中文,从德国的 IP 地址访问就显示德语——这就是这种推断方式。但这种方法有其局限性:

  • 使用 VPN 时,会显示 VPN 服务器所在国家的语言
  • 居住在海外的中国人会被显示当地语言
  • 多语言国家(瑞士、比利时等)仅靠 IP 地址无法确定语言

因此,大多数网站将 Accept-Language 作为第一优先,GeoIP 作为后备(辅助判断)使用。

用于语言判断的其他信号

大型 Web 服务为了更精确地判断语言,会组合使用多种信号。

  • Cookie / 本地存储:记住用户过去选择的语言,下次访问时应用。这是最可靠的方法
  • 用户账户设置:使用已登录用户个人资料中设置的语言
  • URL 路径:在 URL 中包含语言代码的方式,如 /ja//en/。本站也采用这种方式
  • 浏览器的 navigator.language:通过 JavaScript 获取的浏览器语言设置。与 Accept-Language 信息相同,但可在客户端使用

判断的优先顺序通常是:用户明确选择 > Cookie > Accept-Language > GeoIP。因为用户自己选择的语言是最可信的信息。

语言设置与隐私的关系

Accept-Language 头可能被用作浏览器指纹的一部分。

例如,"中文最优先,其次是法语,然后是英语"这样罕见的语言设置,可能成为识别你的线索。语言的优先顺序、品质值的细微设置、支持的语言数量因用户而异。

在本站首页可以查看你的浏览器正在发送的语言设置。请访问查IP,检查一下自己正在发送哪些信息。

想深入了解 Web 多语言化技术和浏览器机制的读者,Web 技术解说书籍可供参考。

本文相关术语

HTTP 头 Accept-Language 是浏览器自动发送的 HTTP 请求头之一。 Cookie 将用户选择的语言设置保存在 Cookie 中,下次访问时应用。 IP 地址 GeoIP 的语言推断基于 IP 地址的地理信息。使用 VPN 时会导致误判。