Как определить язык пользователя по его IP-адресу - PullRequest
5 голосов
/ 23 февраля 2010

Я разработал сайт www.tenxian.com.

Имеется три языковые версии: английская, японская и китайская. Как я могу написать эффективную программу PHP, которая может автоматически выбирать языковую версию на основе IP-адреса посетителя?

Если бы я использовал «if-else», код был бы очень сложным; Если я использую switch-case, то как его написать, поскольку данные, с которыми нужно иметь дело, это диапазоны IP, а не конкретные числа. Кроме того, я не знаю этих диапазонов IP

Какой самый простой способ сделать это?

Ответы [ 8 ]

22 голосов
/ 23 февраля 2010

Пожалуйста, ПОЖАЛУЙСТА, не делайте ошибку, думая, что IP == язык. Сначала посмотрите на заголовок языка браузера, затем на строку идентификации браузера, которая может содержать язык ОС, и только затем учитывайте IP-адрес. Почти в 100% случаев браузер принимает заголовок языка подтверждения и его достаточно.

И всегда предоставляйте пользователю возможность переключиться на другой язык.

Если не считать простой случай иностранца за границей, как вы определяете язык для Бельгии, где они говорят по-французски, по-голландски и по-немецки? (Может быть, это не относится к вашему делу, но просто философски.:)).

2 голосов
/ 23 февраля 2010
<?php
$ln = split(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
print_r($ln[0]);
?>
2 голосов
/ 23 февраля 2010

Да, пожалуйста, не делайте этого ... Google делает это и раздражает. Я всегда получаю тайскую версию вместо английской из моего браузера.

Используйте заголовки http из браузера.

2 голосов
/ 23 февраля 2010

Проверьте GeoPlugin:

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

0 голосов
/ 23 февраля 2010

Предполагая, что вы можете конвертировать диапазоны IP-адресов в один из ваших языковых вариантов, вы можете сделать это (все ответы выше): хранить все ваши сообщения в приложениях в ассоциативном массиве этой формы.

$MESSAGES[$USER_LANGUAGE][$msgId]

, где $USER_LANGUAGE может быть китайским, японским или английским (или любым другим эквивалентным перечислением). $msgId могут быть такими вещами, как «login.successful», «login.fail» и т. Д. Где бы вы ни отображали сообщения пользователю, не отображайте жестко закодированные строки, создайте ссылку на переменную, используя $msgId.

Вы можете обращаться к ней как к глобальной переменной ИЛИ вы можете создать функцию, которая принимает в качестве параметра $ msgId и возвращает сообщение, $USER_LANGUAGE также может быть глобальной переменной (которая устанавливается в первый раз, когда пользователь входит).

0 голосов
/ 23 февраля 2010

Возможно, вы захотите использовать какую-либо форму базы геокодирования IP ( пример ).

0 голосов
/ 23 февраля 2010

взгляните на модуль maxmind geoip для PHP (http://www.maxmind.com/app/php),, поскольку для вашей структуры данных, возможно, введите его в код страны ISO-3166-1, который возвращает apache_note("GEOIP_COUNTRY_CODE");.

0 голосов
/ 23 февраля 2010

Возможно, это поможет: www.countryipblocks.net

...