【问题标题】:How to detect a user's language through their IP Address如何通过 IP 地址检测用户的语言
【发布时间】:2011-01-19 22:52:54
【问题描述】:

我开发了一个网站www.tenxian.com。

有英文、日文、中文三种语言版本。如何编写一个有效的 PHP 程序,可以根据访问者的 IP 地址自动选择语言版本?

如果我使用“if-else”,代码会很复杂;如果我使用 switch-case,如何编写它,因为应该处理的数据是 IP 范围,而不是特定的数字。此外,我不知道这些 IP 范围

最简单的方法是什么?

【问题讨论】:

  • 我相信您在问两件事 - 如何将 IP 分配给您的一种语言(或用户来自哪个国家/地区)?以及如何以正确的语言显示应用程序中的所有消息?对吗?
  • 只有三种语言,英文、中文和日文。如果我知道访客来自日本,我会将其重定向到日文版;如果访客来自大中华区,我会将其重定向到中文版;否则我会把它重定向到英文版。
  • 很明显你想要最简单的方法来做到这一点..将它添加到问题中是没有意义的。
  • 不要。仅仅因为我来自比利时,Myspace 和 Mappy.com 总是为我提供法语页面...我不会说法语。比利时一半以上的人不会说法语。

标签: php localization switch-statement ip-geolocation


【解决方案1】:

看看用于 PHP (http://www.maxmind.com/app/php) 的 maxmind geoip 模块,至于您的数据结构,可能会将其键入apache_note("GEOIP_COUNTRY_CODE"); 返回的 ISO-3166-1 国家代码。

【讨论】:

  • 国家代码是不够的:像比利时和瑞士这样的国家有不止一种官方语言。
【解决方案2】:
<?php
$ln = split(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
print_r($ln[0]);
?>

【讨论】:

  • 对于那些刚刚来到这里的人(比如我),split() 现在已被弃用(PHP 5.3.0)。 explode() 工作正常。
【解决方案3】:

是的,请不要这样做......谷歌这样做并且令人讨厌......我总是从我的浏览器中获得泰文版本而不是英文版本。

使用浏览器中的 http 标头。

【讨论】:

  • 谷歌在这方面很糟糕。即使您设法将界面切换为不同的语言,当点击进入不同的服务(如 Google 主页 -> 地图)时,它也会恢复为您的 IP 区域设置。
【解决方案4】:

请不要误以为 IP == 语言。首先查看浏览器的接受语言标头,然后查看可能包含操作系统语言的浏览器标识字符串,然后才考虑 IP。在几乎 100% 的情况下,浏览器接受语言标头将存在且足够。

并始终让用户选择切换到另一种语言。

除了外国人在国外的简单情况,你如何确定比利时的语言,他们说法语、荷兰语和德语? (也许这不适用于您的情况,但仅适用于哲学。:))。

【讨论】:

  • +1 总是让用户可以选择切换到另一种语言...这是最好的方式.. :)
  • 如果我真的想根据 IP 地址查找某个区域使用的语言怎么办?假设我有这样的要求。
  • @Ajay 找到一个关于在哪里说什么语言的数据库,定位 IP 并将两者混合在一起。如果生成的语言不止一种,请进行最佳猜测。
【解决方案5】:

假设您可以将 IP 范围转换为您的语言选择之一,您可以这样做(以上所有回复):将应用程序中的所有消息存储在这种形式的关联数组中。

$MESSAGES[$USER_LANGUAGE][$msgId]

其中$USER_LANGUAGE 可以是中文、日文或英文(或任何其他等效枚举)。 $msgId 可以是“login.successful”、“login.fail”等。无论何时向用户显示消息都不会显示硬编码字符串,请使用 $msgId 引用变量。

您可以将其作为全局变量访问,或者您可以创建一个函数,将 $msgId 作为参数并返回消息,$USER_LANGUAGE 也可以是全局变量(在用户第一次设置进来)。

【讨论】:

    【解决方案6】:

    您可能想要使用某种形式的 IP 地理编码数据库 (example)。

    【讨论】:

      【解决方案7】:

      也许这会有所帮助:www.countryipblocks.net

      【讨论】:

        【解决方案8】:

        【讨论】:

          猜你喜欢
          • 2012-11-15
          • 1970-01-01
          • 2014-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-11
          • 1970-01-01
          • 2011-12-15
          相关资源
          最近更新 更多