如何通过IP地址检测用户的语言

时间:2010-02-23 05:28:27

标签: php localization switch-statement ip-geolocation

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

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

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

最简单的方法是什么?

8 个答案:

答案 0 :(得分:22)

请,请不要错误地认为IP ==语言。首先查看浏览器accept-language标头,然后查看可能包含OS语言的浏览器标识字符串,然后再考虑IP。在几乎100%的情况下,浏览器接受语言标题将存在且足够。

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

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

答案 1 :(得分:2)

答案 2 :(得分:2)

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

使用浏览器中的http标头。

答案 3 :(得分:2)

<?php
$ln = split(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
print_r($ln[0]);
?>

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

假设您可以将IP范围转换为您的一种语言选择,您可以执行此操作(上面的所有回复):将应用程序中的所有消息存储在此表单的关联数组中。

$MESSAGES[$USER_LANGUAGE][$msgId]

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

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