I18n的一个网站:我如何检测语言?

时间:2010-07-18 20:09:39

标签: browser localization internationalization

我正在开发一个网站,它有一些小的国际化需求(英语,法语和德语),我想知道用户来自哪里,所以我知道要显示哪些。我认为正确的方法是检查“HTTP_ACCEPT_LANGUAGE”标题以找出用户请求的#1语言(并且可以安全地假设德国的所有用户都有默认要求DE的浏览器等)

这是对的吗?或者我还做了别的事情(希望没有太多荒谬,比如试图从他们的IP中弄清楚他们的国家)......?

thanks-- 埃里克

3 个答案:

答案 0 :(得分:9)

如果您选择目前最受欢迎的选择 - geoIP - 而无需进一步考虑,那么您的用户就不会受到青睐。

语言和国家不重叠。您打算如何处理来自瑞士IP地址的用户?比利时?加拿大?如果你在每种情况下使用多数语言,你会惹恼那些碰巧属于大型语言少数群体的重复访客:他们每次都会以“错误”的语言受到欢迎,即使该网站可用他们的首选语言。对于外籍人士来说也是如此 - 从经验来看,仅仅因为我碰巧去瑞典旅行而被瑞典人打招呼是非常令人不安的。 (甚至大网站也弄错了。前几天我从伦敦到达温哥华机场,谷歌把我转到fr_CA。)不要忘记,很多人都是多国语言或非母语人士,他们的国家使用多数语言居住。

以下是我遵循的指导原则:

  1. 首先检查用户告诉您可能的选择。最简单的方法是:
    • HTTP用户代理字符串(examples for Firefox)中解析语言/文化信息。这告诉您一些他们正在运行的操作系统版本,并且是一个非常好的偏好指示。他们当然可能会欺骗用户代理,但如果他们这样做,他们就不会感到惊讶,他们的预设错误。
    • 接受语言 HTTP标头(优先级较低,因为您可能会看到比英语作为操作系统偏好的实际用户更多的“en”)。
  2. 其次,保存用户的偏好。如果他们登录,请询问他们并将其保存为选项。如果没有,请设置一个cookie(具有合理的到期设置)。这样,当他们回来时,他们会惊喜万分。
  3. 仅使用GeoIP作为最后的手段。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

你几乎回答了你自己的问题 - 你可以使用那个标题或只是geoip(它很简单易用)

从下载: http://geolite.maxmind.com/download/geoip/api/php/

示例代码:

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);