我开发了一个网站www.tenxian.com。
它有三种语言版本,英语,日语和中文。如何编写有效的PHP程序,可以根据访问者的IP地址自动选择语言版本?
如果我使用“if-else”,代码将会非常复杂;如果我使用switch-case,如何写它,因为应该处理的数据是IP范围,而不是特定的数字。此外,我不知道这些IP范围
最简单的方法是什么?
答案 0 :(得分:22)
请,请不要错误地认为IP ==语言。首先查看浏览器accept-language标头,然后查看可能包含OS语言的浏览器标识字符串,然后再考虑IP。在几乎100%的情况下,浏览器接受语言标题将存在且足够。
始终让用户选择切换到另一种语言。
除了国外外国人的简单案例之外,您如何确定比利时的语言,他们会说法语,荷兰语和德语? (也许这不适用于你的情况,但只是哲学上的。:))。
答案 1 :(得分:2)
查看GeoPlugin:
答案 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
也可以是全局变量(这是第一次设置)用户进来。)