Определение языка пользователя на PHP

30 374 просмотра 18 комментариев 18 ноября 2012

Написал небольшую библиотечку для CodeIgniter, но ее можно использовать в любом другом месте с малейшими изменениями.
Она помогает определить язык пользователя и если пользователь русскоговорящий (Русский, Беларус, Украинец и т.д) показываем ему информацию на русском. Если нет то на английском(это я к примеру, настроить языки можно как угодно). Все это оформлено в виде класса с возможностью быстро задавать что-то вроде ссылок с языка пользователя на язык лучший для его понимания на сайте.

Скринкастик

Пример использования библиотеки

$this->load->library('lang_detect');
$langs = array(
  'ru' => array('ru', 'be', 'uk', 'ky', 'ab', 'mo', 'et', 'lv'),
  'de' => 'de'
);
$lang = $this->lang_detect->getBestMatch('en', $langs);

Этот код значит что если у 'ru', 'be', 'uk', 'ky', 'ab', 'mo', 'et', 'lv' язык, то функция вернет ru, если у него de язык то вернет de, во всех остальных случаях вернет en

Скачать библиотеку можно тут

18 комментариев

Спасибо, очень полезная библиотека! =)
В CI правда можно определить язык при помощи его родной библиотеки "User Agent", но вот если требуется к примеру определить язык в hooks в точке "pre_controller", до вызова конструктора контролера в котором подгружаются языковые файлы, ваш код очень практичен.
Да не за что.  В ней правда критическая ошибка есть. Далеко не всегда передается HTTP_ACCEPT_LANGUAGE например фесбук ко мне на сайт заходит, ему выдавало 500 ошибку, исправляется элементароно. Где-то проверку надо следать на isset HTTP_ACCEPT_LANGUAGE. И если нету то выдавать дефолтный язык.
Ошибку исправил ссылку на новую версию в статье обновил
Спасибо за такую полезную вещь, хотелось бы спросить, как я могу это использовать в своем сайте, который построен на ImageCMS, которая написана на CodeIgniter. КБиблиотеку я так понял добавляем в /application/libraries , а где делать вызов этой библиотеки? Я пока новичок в CI.
Отошел уже от CI, так что не вспомню так с ходу. В документации написано как вызывать библиотеки, и в скринкасте я вызывал вроде.
Выдает ошибку.

A PHP Error was encountered


Severity: Notice


Message:  Undefined index: HTTP_ACCEPT_LANGUAGE


Filename: libraries/lib_lang_detect.php


Line Number: 18



 


A PHP Error was encountered


Severity: Warning


Message:  Cannot modify header information - headers already sent by (output started at /customers/4/5/e/csdownload.pm/httpd.www/system/core/Exceptions.php:185)


Filename: libraries/Session.php


Line Number: 688

 

Помогите исправить.
Максим, тот что чуть ниже крокомментировал, написал как испраивть
Спасибо за библиотеку)
Переписал все в одну функцию, так как нужно с ходу получить язык и вывести + добавил проверку    if ( isset($_SERVER[‘HTTP_ACCEPT_LANGUAGE’]) ) {
  код
}
Владимир
15 августа 2015
Друзья, буду благодарен за помощь. У меня сайт на WP и 2 языка, ру и уа.
разная локализация сайта сделана путем копирования одного из языков на поддомен типа уа.мойсайт.ком
Суть работы библиотеки понял. Но я не знаю, к сожалению, как и куда весь этот код вставить, как реализовать скажем так саму механику редиректа на нужный язык.
Оскар
1 июня 2016
аналогичная проблема. Вы решили проблему?
Все отлично!
Но. Думаю неудобно будет каждому скачавшему подключать библиотеку, и постоянно указывать дефолты. Т.е. скорее всего каждый под себя перекроит, указав наиболее употребимый дефолт. Здорово было бы, если бы автор в библеотеке уже сделал умолчания, т.е. тот массив, тот массив который в примере шел после функции уже был зашит, и передавался, если функция вызывается без параметров getBestMatch()
Алексей
29 января 2016
Здравствуйте!
Что я не вижу ссылку на на библиотеку, можете выслать её мне на мыло или оставить тут?
Добавил ссылку в статью
Виктор
9 марта 2016
Добрый день!
Тоже не могу обнаружить ссылку для скачивания. Пришлите, пожалуйста, на почту.
Заранее спасибо!
Да, извиняюсь, добавил ссылку в статью
не могу обнаружить ссылку для скачивания. Пришлите,
Заранее спасибо!
В самом низу статьи
Благодарю, прикрутил у себя.

Вы можете оставить комментарий