Я разработал веб-сайт www.tenxian.com.
Это имеет три языковых версии, английский, японский язык и китайский язык. Как я могу записать эффективную программу PHP, которая может автоматически выбрать языковую версию на основе IP-адреса посетителя?
Если бы я использую, "если еще", код был бы очень сложным; Если я использую случай переключателя, как записать это начиная с данных, с которыми нужно иметь дело, диапазоны IP, не конкретные числа. Кроме того, я не знаю эти диапазоны IP
Что самый легкий путь состоит в том, чтобы сделать это?
ПОЖАЛУЙСТА, не ошибайтесь, думая, что IP == язык. Сначала посмотрите на заголовок браузера accept-language, затем на строку идентификации браузера, которая может содержать язык ОС, и только потом учитывайте IP. Почти в 100% всех случаев заголовок браузера на принимаемом языке будет присутствовать и быть достаточным.
И всегда давать пользователю возможность переключиться на другой язык.
Помимо простого случая иностранца за границей, как вы определяете язык для Бельгии, где они говорят на французском, голландском и немецком языках? (Возможно, это не относится к вашему случаю, но просто философски. :)).
Да, пожалуйста, не делайте этого ... Google делает это и меня ужасно раздражает ... Я всегда получаю в браузере тайскую версию вместо английской. .
Используйте заголовки http из браузера.
<?php
$ln = split(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
print_r($ln[0]);
?>
Вы, вероятно, захотите использовать какую-то форму базы данных IP-геокодирования (пример).
Предполагая, что вы можете конвертировать диапазоны IP-адресов в один из выбранных вами языков, вы могли бы сделать следующее (все ответы выше): пусть все ваши сообщения в приложениях хранятся в ассоциативном массиве такой формы.
$MESSAGES[$USER_LANGUAGE][$msgId]
где $USER_LANGUAGE
может быть китайским, японским или английским (или любым другим эквивалентным перечислением). $msgId
может быть таким, как "login.successful", "login.fail" и т.д. Когда вы выводите сообщения пользователю, не отображайте жестко закодированные строки, сделайте ссылку на переменную, используя $msgId
.
Вы можете обращаться к ней как к глобальной переменной ИЛИ вы можете создать функцию, которая принимает $msgId в качестве параметра и возвращает сообщение, $USER_LANGUAGE
также может быть глобальной переменной (которая устанавливается при первом входе пользователя).
посмотрите на модуль maxmind geoip для PHP (http://www.maxmind.com/app/php), что касается вашей структуры данных, то, возможно, она соответствует коду страны ISO-3166-1, который apache_note("GEOIP_COUNTRY_CODE");
возвращает.