我选择将这个问题本身作为一个问题,因为它在评论中引起了如此多的争论 原帖.

有趣的是,很多 SO 上的人(开发人员)都没有获得本地化。以下是我对它应该如何运作的看法:

在我研究过的所有浏览器(以及 .NET 开发人员)中,当您查看用户的文化偏好时,它采用以下格式:语言文化。

所以我们有:

  • en-GB - 英语 - 英国文化
  • en-US - 英语 - 美国文化
  • en - 英语 - 不变的文化。
  • fr-FR – 法语 – 法国文化
  • fr-CH – 法语 – 瑞士文化
  • de-CH – 德语 – 瑞士文化
  • de-DE – 德语 – 德国文化

微软软件定义网络 获取 .NET 框架支持的完整列表。

当我访问一个网站时,它知道我想要 en 部分的英语,并且它知道我对它倾向于英国感兴趣(数字格式、日期格式)。因此,当我访问 google.com 时,它会将我带到 google.de(因为我的 IP 地址),如果 google.de 以英语向我显示所有内容,那完全没问题,但由于 google.de 是德语,所以完全错误。我几乎无法控制自己的 IP 地址,但可以完全控制自己的语言和文化设置。如果您感兴趣,微软的新搜索引擎(bing.com)可以正确处理事情。我们希望微软能够像谷歌一样学习如何进行搜索,或者谷歌能够像微软一样学习如何本地化;)

微软软件定义网络 这里还有另一篇好文章以获取更多信息

那么您对网站应如何处理本地化有什么建议?

有帮助吗?

解决方案

这里的解决方案非常简单,开发人员做其他事情很烦人。

  1. 尊重浏览器设置。如果它说英语,那么天哪,它就是英语。

  2. 如果您绝对必须这样做,那么只需在顶部添加一个按钮即可选择其他内容。然后,也只有到那时,您才会覆盖浏览器。

  3. 如果你认为你的方法更好。停下来,让人打你一巴掌。它不是。根据需要重复。

  4. 摆脱那些询问某人所在国家/地区的网页。只需根据浏览器默认设置显示您的正常页面,然后参见上面的第 2 项。 我还没有遇到过真正重要的网站。 更新: 几年后,现在有理由这样做了。2013 年,英国制定了有关 Cookie 的政策,网站运营商需要尊重位于该国、向该国访问者提供页面的网站。因此,请注意您所在国家/地区的法律。

  5. 如果您碰巧有一个站点确实由多个国家/地区的多个服务器提供服务,那么您可能可以检测到哪一台服务器真正更接近提供服务。如果你做不到,就停止疯狂的重定向,然后不要尝试为他们做出决定。

其他提示

如果本地化设置可用 - 包括但不限于 HTTP Accept-Language 标头 - 那么网站绝对应该尊重它们。

反对这一点的常见论点是“普通用户”不够聪明,无法找到语言设置并将其配置为符合自己的偏好,因此这些设置通常是不正确的(除非用户碰巧在我们)。

那是错误的解决方案。

如果很大一部分用户无法找到(或懒得找到)他们的浏览器的语言设置,那么正确的反应是 让他们更容易找到, ,而不是让网站忽略它们的设置。也许可以从程序的顶级菜单直接访问语言设置,而不是将其隐藏在过于复杂的“首选项”对话框中。也许在程序第一次运行时询问语言首选项。也许使用操作系统的本地化设置。或者也许是完全不同的东西,如果这就是使浏览器几乎确定将发送有关用户偏好的正确信息所需要的。但不要只是举手,说“它没用,无法修复!”,然后忽略它。

其他答案谈到让用户在网站上的个人资料中选择语言或区域设置,这也很重要并且绝对应该是标准的,但这只是为了提供特定于网站的覆盖用户的正常设置。但是,如果用户没有在网站上覆盖此设置,则正确的操作是默认使用其浏览器设置中指定的最首选的可用语言/区域设置,而不是基于其 IP 地址的地理位置。

在我的职业生涯中,我曾维护过部分 TCP/IP 堆栈。这让我非常清楚地知道 IP 地址不应该用作网络层地址以外的任何内容。IP 地址和位置之间的任何关联几乎都是巧合 - 这是地址分配方式的产物,而不是 IP 地址含义的任何基本部分。

(它们也不能用作计算机的唯一标识符,但这是一个不同的故事)

我建议将地理定位排除在外。HTTP 标准包括一种让浏览器或其他用户代理在每个请求中包含用户文化偏好的方法(请记住,它是加权偏好列表,不一定只是一种文化)。由于浏览器比您更接近用户,因此您应该尊重此请求,至少作为默认请求。

然后允许用户暂时或永久更改他们对您网站的偏好就可以了。甚至可以允许用户选择查看具有不同文化设置的不同内容。一个疯狂的例子是一个同时包含政治新闻和技术信息的网站。有人希望以他们的“自然”语言获得新闻,但以英语获得技术信息,这是很合理的。

最后,有一个后备模式是可以的。例如,如果您有一个根据用户所在区域(例如经销商)为用户提供服务的网站,那么日语内容可能只存在于您的亚洲区域子网站上。访问您的 EMEA 网站的日语用户可能只会看到英文内容,这很可能是他的最后选择。

在我创建的网站上,我通常遵循以下模式:

  • 每个页面都有一个唯一的 URL,其中包含某种语言,通常类似于 /en/page 或不同的(子)域
  • 如果用户打开使用未指定语言的 URL,例如 /page 我开始猜测:
    • 前一个会话的 cookie 是否可用?
    • 如果不是的话,是 Accept-Language 可用,我可以将其映射到网站上可用的语言吗?
    • 如果没有的话,如果有可能的话,我可以通过IP来猜测吗?
    • 如果没有,则默认为网站的默认语言。
  • 我使用猜测的语言设置 cookie,并将用户重定向到具有适当 URL 的网站
  • 我在每个页面上都设置了语言开关,所以 /en/page 可以轻松切换到 /xx/page
    • 如果用户切换到不同的页面,Cookie 就会更新

理想情况下,我只需要猜测一次,然后使用用户的 cookie,或者用户直接访问所需的页面。

我同意,让用户有机会在您的应用程序中使用用户首选项覆盖它们。这对于无法从浏览器设置中得出的时区本地化问题特别方便。

我冒着被认为不礼貌的风险,但我认为我的 关于这个主题的帖子 将会有更多信息丰富的答案,主要是因为我的帖子确实是一个问题。很抱歉我之前没有找到那个帖子。

智能默认值和用户覆盖默认值的能力之间存在差异。在我开发的大型应用程序中,我通过浏览器设置、地理位置等假设了用户的区域设置。——但始终为用户提供了一种轻松切换的方式。

我不知道还有什么办法可以做到这一点。不给用户机会纠正你的假设是非常有问题的,因为有时你会出错。

添加:

我认为你的问题是,虽然你可以编辑你的区域设置,但如果它们看起来与默认设置基本相同,应用程序开发人员就无法判断你是故意保留它,还是因为你不知道如何保留它或者为什么要改变它。

我建议尊重用户的本地化设置, 除了 如果设置是压倒性的默认设置,用户可能无法更改。例如,我相信绝大多数(90+%)的用户都拥有 en-us 只要有一种简单的方法来切换区域设置,在越南进行地理定位的设置几乎总是可以通过查看越南语内容而不是美国英语内容得到更好的服务。另一方面,如果位于美国的用户有越南语设置,请务必向他或她提供越南语内容。

这会让越南的美式英语用户感到恼火吗?当然。但这也是为最大多数人带来的最大好处,并有助于确保普通非技术用户获得最佳的现实体验。在我们能够用枪指着用户的头并迫使他们在打开计算机之前诚实地声明他们的语言/文化偏好之前,我们将需要这样的启发式方法。

我已经看到来自客户的足够有力的错误报告,经过调查发现其中一位用户的浏览器文化设置错误,我们现在让客户使用配置设置覆盖浏览器。浏览器的文化设置经常是错误的,这不是很有用,而且对于大多数最终用户来说也很难找到或更改它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top