我开发了一个网站www.tenxian.com。
有英文、日文、中文三种语言版本。如何编写一个有效的 PHP 程序,可以根据访问者的 IP 地址自动选择语言版本?
如果我使用“if-else”,代码会很复杂;如果我使用 switch-case,如何编写它,因为应该处理的数据是 IP 范围,而不是特定的数字。此外,我不知道这些 IP 范围
最简单的方法是什么?
我开发了一个网站www.tenxian.com。
有英文、日文、中文三种语言版本。如何编写一个有效的 PHP 程序,可以根据访问者的 IP 地址自动选择语言版本?
如果我使用“if-else”,代码会很复杂;如果我使用 switch-case,如何编写它,因为应该处理的数据是 IP 范围,而不是特定的数字。此外,我不知道这些 IP 范围
最简单的方法是什么?
请,请不要误以为 IP == 语言。首先查看浏览器的接受语言标头,然后查看可能包含操作系统语言的浏览器标识字符串,然后才考虑 IP。在几乎 100% 的情况下,浏览器接受语言标头将存在且足够。
并始终让用户选择切换到另一种语言。
除了简单的外国人在国外的情况,你如何确定比利时的语言,他们说法语、荷兰语和德语?(也许这不适用于您的情况,而仅适用于哲学。:))。
查看 GeoPlugin:
是的,请不要这样做......谷歌这样做并且令人讨厌......我总是从我的浏览器中获得泰文版本而不是英文版本。
使用浏览器中的 http 标头。
<?php
$ln = split(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
print_r($ln[0]);
?>
也许这会有所帮助:www.countryipblocks.net
看看 PHP 的 maxmind geoip 模块(http://www.maxmind.com/app/php),至于您的数据结构,可能会将其键入apache_note("GEOIP_COUNTRY_CODE");
返回的 ISO-3166-1 国家代码。
您可能想要使用某种形式的 IP 地理编码数据库(示例)。
假设您可以将 IP 范围转换为您的语言选择之一,您可以这样做(以上所有回复):将应用程序中的所有消息存储在这种形式的关联数组中。
$MESSAGES[$USER_LANGUAGE][$msgId]
where$USER_LANGUAGE
可以是中文、日文或英文(或任何其他等效枚举)。$msgId
可以是“login.successful”、“login.fail”等。在向用户显示消息的地方不显示硬编码字符串,请使用$msgId
.
您可以将其作为全局变量访问,或者您可以创建一个以 $msgId 作为参数并返回消息的函数,$USER_LANGUAGE
也可以是全局变量(在用户第一次进入时设置)。