В наше время считается нормальной практикой делать сайт с интерфейсом на нескольких языках. Вы, наверное, уже замечали, что зайдя, например, на facebook.com сайт автоматически определяет Ваш язык и пишет уже на русском. Как это происходит? Поскольку изначально тот же facebook был написан на php, то и пример в разделе php-статей приведу на этом языке.
Всё очень просто. Для определения ip, домен, адреса, браузера и других вещей в php есть стандартные элементы суперглобального массива - $_SERVER. Но нам нужен один из них:
$_SERVER["HTTP_ACCEPT_LANGUAGE"]
Данный элемент передаёт серверу информацию о языке посетителя. Он возвращает нам, например, либо en, либо ru и тд. Сама информация выглядит примерно следующим образом:
ru-RU,ru;q=0.8,
en-US;q=0.5,
en;q=0.3
Сначала язык (ru), потом регион (RU), а после уже приоритет (q=0.8). Чем больше приоритет (q), тем больше пользователь предпочитает данный язык. Если q нет, значит, оно равно 1. Например, у ru-RU нет q, значит, оно равно 1, и данный язык наиболее подходящий.
Теперь воспользуемся следующим кодом для определения языка:
Код PHP
<?php
preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:;q=([0-9.]+))?/', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $matches); // вычисляем соответствия с массивом $matches
$langs = array_combine($matches[1], $matches[2]); // Создаём массив с ключами $matches[1] и значениями $matches[2]
foreach ($langs as $n => $v)
$langs[$n] = $v ? $v : 1; // Если нет q, то ставим значение 1
arsort($langs); // Сортируем по убыванию q
echo key($langs); // Выводим язык по умолчанию
?>
В результате получаем язык пользователя по умолчанию. После его можно установить на сайте, а посетители увидят интерфейс уже с нужным ему языком, причём для этого ему не нужно будет совершать каких-либо действий! Всё это будет незаменимо для сайтов, которые подразумевают работу с мультиязычной аудиторией и контентом.
И другой способ определения языка пользователя PHP
<?php
preg_match('/^\w{2}/',$_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
switch (strtolower($matches[0])){
case "ru": $accept_lang="ru";break; // если русский
case "de": $accept_lang="de";break; // если немецкий
case "en": case "uk": case "us": $accept_lang="en";break; // если английский
case "ua": $accept_lang="ua";break; // если украинский
default: $accept_lang="en";break; // если нет совпадений, то по умолчанию, например, английский
}
echo $accept_lang;
?>
Как автоматически переслать посетителя нужную языковую версию сайта PHP?
Для начала создаём массив с адресами (+ нужные поддомены) для каждого языка. Допустим, русская версия будет иметь стандартный адрес. Английская будет иметь вначале en. , испанская es. , а французская fr.
// Создаем массив с адресами для каждого языкового кода
$sites = array(
"ru" => "http://mysite.com/",
"en" => "http://en.mysite.com/",
"es" => "http://es.mysite.com/",
"fr" => "http://fr.mysite.com/",
);
// получаем язык
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // вырезаем первые две буквы
// проверяем язык
if (!in_array($lang, array_keys($sites))){
$lang = 'ru';
}
// перенаправление на субдомен
header('Location: ' . $sites[$lang]);
Спасибо за внимание!