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

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

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

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

если пройти по этой ссылке то сервис просто выдаст вам 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();
  }
?>

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

Добавить комментарий


Защитный код
Обновить






Кто на сайте
Сейчас 109 гостей онлайн