5

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

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

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

最简单的方法是什么?

4

8 回答 8

26

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

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

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

于 2010-02-23T05:43:16.633 回答
2

查看 GeoPlugin:

http://www.geoplugin.com/webservices/php

于 2010-02-23T05:32:35.590 回答
2

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

使用浏览器中的 http 标头。

于 2010-02-23T05:48:01.310 回答
2
<?php
$ln = split(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
print_r($ln[0]);
?>
于 2010-02-23T07:53:22.487 回答
0

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

于 2010-02-23T05:32:55.587 回答
0

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

于 2010-02-23T05:32:59.600 回答
0

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

于 2010-02-23T05:33:16.930 回答
0

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

$MESSAGES[$USER_LANGUAGE][$msgId]

where$USER_LANGUAGE可以是中文、日文或英文(或任何其他等效枚举)。$msgId可以是“login.successful”、“login.fail”等。在向用户显示消息的地方不显示硬编码字符串,请使用$msgId.

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

于 2010-02-23T05:42:12.697 回答