В основе лежит константа $_SERVER[\"HTTP_ACCEPT_LANGUAGE\"], которая как раз и содержит сведения о предпочитаемых языках пользователя. Выглядит она примерно так: \"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3\". Здесь перечисляются языки и регионы, а также приоритет q. Чем больше 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
$default_lang = $langs[0]; // Берём 1-й элемент (он же максимальный по q)
echo $default_lang; // Выводим язык по умолчанию
?>
Получив язык по умолчанию, мы можем сразу же установить его и на сайте, тем самым, выводя контент для пользователя на том языке, который он предпочитает.
Таким образом определяется язык пользователя на PHP, что очень пригодится мультиязычным сайтам.