Как сделать разные языковые версии сайта
Допустим у вас есть сайт и он имеет как русскую так и английскую аудиторию. Так же у вас есть английская и русская версии сайта. Как сделать так что бы англоязычным пользователям выдавалась английская версия, а русскоязычным – русская версия сайта?
Есть один замечательный сервис:
если пройти по этой ссылке то сервис просто выдаст вам xml с вашими данными. Но если пройти по такому адресу и ещё передать get – параметр ip к примеру:
то сервис вам выдаст такую текстовую информацию:
Country: UNITED STATES (US)
City: (Unknown city)
IP: 11.111.11.11
Т.е. он даёт информацию по IP переданному в параметре. Мы это будем использовать в нашем скипте, что бы определять откуда наш посетитель. Алгоритм следующий: скрипт будет проверять у пользователя наличие Куки с именем, допустим “lang”, и если её нет, то он обратиться к сервису, передав в get-параметре ip адрес посетителя, получив ответ проверяем PHP – функцией strpos() наличие в ответе подстроки (RU), если её нет, то значит пользователь точно не русскоязычный – направим его на английскую версию сайта. Если подстрока (RU) найдена, то выдаём русские странички. Если Куки с именем “lang” существует – не обращаемся никуда, а просто выдаем соответствующее содержимое.
Вот вариант скрипта, реализующего этот алгоритм:
<?php // Проверяем наличие куки с именем 'lang': if(!isset($_COOKIE['lang'])) { // Если Куки нет, то обращаемся к серверу, передавая адрес посетителя в параметре ip, и // если в ответе отсутствует подстрока '(RU)'… if(strpos(file_get_contents('http://api.hostip.info/get_html.php?ip='.$_SERVER['REMOTE_ADDR']),'(RU)') === FALSE) { // ставим Куки, перенаправляем пользователя: setcookie('lang','en'); // мягкий редирект: header($_SERVER['SERVER_PROTOCOL'].' 301 Moved Permanently'); header('Location: http://'.$_SERVER['HTTP_HOST'].'/en/index.html'); exit(); } // Иначе ставим Куки со значением 'ru': else setcookie('lang','ru'); } // Если Куки есть и его значение 'en'… else if($_COOKIE['lang'] == 'en') { // перенаправляем пользователя: header($_SERVER['SERVER_PROTOCOL'].' 301 Moved Permanently'); header('Location: http://'.$_SERVER['HTTP_HOST'].'/en/index.html'); exit(); } ?>
Перенаправление в скрипте происходит только для одного типа пользователей. Для каждого пользователя будет произведено только одно обращение к сервису, если конечно у пользователя нет привычки чистить куки и они вообще у него включены, но это над этим я предлагаю подумать вам, кстати, если немного доработать скрипт, то можно определять не только англоязычных и русскоязычных пользователей, но и из любой другой страны, надо только знать какой идентификатор ( тот который в скобках ) сервис присваивает той или иной стране.
Информация копипастерам
Внимание! Копирование контента с сайта, возможно только с разрешения администратора. Т.е. Меня! Я скорее всего разрешу Вам это сделать, в обмен на живую ссылку, на статью оригинал.