Browser 网站的I18n:如何检测语言?

Browser 网站的I18n:如何检测语言?,browser,localization,internationalization,Browser,Localization,Internationalization,我正在一个网站上工作,该网站有一些小的国际化需求(英语、法语和德语),我想知道用户来自哪里,这样我就知道该显示哪个了。我认为正确的方法是检查“HTTP#u ACCEPT#u LANGUAGE”标题,找出用户正在请求的#1语言(可以安全地假设,德国的所有用户都有默认请求DE的浏览器,等等) 对吗?或者我做了其他事情(希望没有什么太可笑的事情,比如试图从他们的IP中找出他们的国家) 谢谢-- Eric您几乎回答了自己的问题-您可以使用该标题,也可以只使用geoip(使用起来非常简单) 下载地址:

我正在一个网站上工作,该网站有一些小的国际化需求(英语、法语和德语),我想知道用户来自哪里,这样我就知道该显示哪个了。我认为正确的方法是检查“HTTP#u ACCEPT#u LANGUAGE”标题,找出用户正在请求的#1语言(可以安全地假设,德国的所有用户都有默认请求DE的浏览器,等等)

对吗?或者我做了其他事情(希望没有什么太可笑的事情,比如试图从他们的IP中找出他们的国家)

谢谢--
Eric

您几乎回答了自己的问题-您可以使用该标题,也可以只使用geoip(使用起来非常简单)

下载地址:

示例代码:

include("geoipcity.inc");
include("geoipregionvars.php");
$gi = geoip_open("GeoLiteCity.dat", GEOIP_STANDARD);
$record = geoip_record_by_addr($gi, $user_ip);
echo "The users country code is:" . $record->country_code;
geoip_close($gi);

我会检查accept language标头和访问者IP地址的来源国。如果accept language标头不是英语(可能是最常用的默认设置),请使用它来设置默认语言。如果接受语言为英语,请使用原始国家/地区设置默认语言。我想这会让你对访问者的母语有一个更有根据的猜测。

如果你不进一步考虑就选择目前最流行的geoIP,那么你对用户没有什么好处

语言和国家不重叠。您将如何处理来自瑞士IP地址的用户?比利时?加拿大?如果你在每种情况下都选择大多数语言,你会惹恼那些恰好属于少数语言群体的回头客:他们每次都会被用“错误”的语言迎接,即使网站上有他们喜欢的语言。外派人士也是如此——从经验来看,仅仅因为我碰巧去了瑞典,就被人用瑞典语问候是非常令人不安的。(即使是大型网站也弄错了。前几天我从伦敦抵达温哥华机场,谷歌把我转到了弗劳卡。)别忘了,很多人都会说多种语言,或者说他们居住国家的大多数语言的非母语人士

以下是我遵循的指南:

  • 首先检查用户对他们可能的选择所说的话。最简单的方法是:
    • 从HTTP用户代理中解析语言/区域性信息。这会告诉你一些关于他们正在运行的操作系统版本的信息,这是一个非常好的偏好指示。他们当然可能是在欺骗用户代理,但如果他们这样做,他们就不太可能惊讶于他们得到了错误的预设
    • Accept LanguageHTTP头(优先级较低,因为您可能会在这里看到比实际用户更多的“en”,操作系统首选英语)
  • 其次,保存用户的首选项。如果他们登录,请询问他们并将其保存为选项。如果没有,则设置cookie(具有合理的到期设置)。这样,当他们回来时,他们会感到惊喜
  • 仅将GeoIP用作最后手段
    Geoip只是一种猜测用户偏好是否可用的方法。这很重要,因为有些地方有几种可能的合理语言可用。(你应该选择英语还是西班牙语作为迈阿密地址?如果不询问,就无法知道。用户偏好只是最好的方式。)如果用户正在旅行怎么办?geoip不是一个好的解决方案。太棒了。谢谢你提供了一个非常全面的答案。我只想提到的是,大多数用户代理将根据操作系统语言进行自我配置,因此几乎不需要验证这两个头;另外,接受语言比复杂的用户代理字符串更容易解析。