Как сделать разные языковые версии сайта

Как сделать разные языковые версии сайта

Допустим у вас есть сайт и он имеет как русскую так и английскую аудиторию. Так же у вас есть английская и русская версии сайта. Как сделать так что бы англоязычным пользователям выдавалась английская версия, а русскоязычным – русская версия сайта?

Есть один замечательный сервис:

http://api.hostip.info

если пройти по этой ссылке то сервис просто выдаст вам xml с вашими данными. Но если пройти по такому адресу и ещё передать get – параметр ip к примеру:

http://api.hostip.info/get_html.php?ip=11.111.11.11

то сервис вам выдаст такую текстовую информацию:

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();

  }

?>

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

 

Возможно Вас заинтересуют эти материалы

PHP: Буферизация вывода

Буферизация вывода в PHP это довольно полезная штука, если уметь ею пользоваться. Скажите сколько раз

POP3 протокол с примерами

POP3 это протокол по которому мы можем получить почту с сервера, для подобной задачи, используется

PHP: Хранение сессии в базе данных

Как и обещал, тема данной заметки: база данных, как обработчик сессии. А так как на