代码之家  ›  专栏  ›  技术社区  ›  Eric

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

  •  4
  • Eric  · 技术社区  · 15 年前

    我正在开发一个网站,它有一些次要的国际化需求(英语、法语和德语),我想知道用户来自哪里,这样我就知道要显示哪个。我认为正确的方法是检查“HTTP#u ACCEPTŠu LANGUAGE”头,找出用户请求的Š1语言(可以肯定的是,德国的所有用户都有默认请求DE的浏览器,等等)。

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

    埃里克

    3 回复  |  直到 15 年前
        1
  •  9
  •   chryss    15 年前

    如果您选择了当前最流行的选择——geoIP——而没有进一步考虑,那么您并没有给您的用户带来什么好处。

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

    1. 首先检查用户是什么 告诉 你知道他们可能的选择。最简单的方法是:
      • 将语言/文化信息从 字符串( examples for Firefox ). 这会告诉你一些关于他们正在运行的操作系统版本的信息,并且是一个非常好的偏好指示。当然,他们可能是在欺骗用户代理,但如果他们这样做,他们就不太可能感到惊讶,因为他们得到了错误的预设。
      • 这个 HTTP头(优先级较低,因为您可能会在这里看到比实际用户更多的“en”,操作系统首选英语)。
    2. 节约 用户的首选项。如果他们登录,请询问他们并将其保存为选项。如果没有,则设置一个cookie(具有合理的过期设置)。这样,他们回来时会惊喜不已。
        2
  •  0
  •   Victor Welling    15 年前

        3
  •  -1
  •   Yawn    15 年前

    您基本上回答了自己的问题—您可以使用该标题,也可以只使用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);