Определение языка пользователя на PHP
Написал небольшую библиотечку для 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", до вызова конструктора контролера в котором подгружаются языковые файлы, ваш код очень практичен.
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’]) ) {
код
}
разная локализация сайта сделана путем копирования одного из языков на поддомен типа уа.мойсайт.ком
Суть работы библиотеки понял. Но я не знаю, к сожалению, как и куда весь этот код вставить, как реализовать скажем так саму механику редиректа на нужный язык.
Но. Думаю неудобно будет каждому скачавшему подключать библиотеку, и постоянно указывать дефолты. Т.е. скорее всего каждый под себя перекроит, указав наиболее употребимый дефолт. Здорово было бы, если бы автор в библеотеке уже сделал умолчания, т.е. тот массив, тот массив который в примере шел после функции уже был зашит, и передавался, если функция вызывается без параметров getBestMatch()
Что я не вижу ссылку на на библиотеку, можете выслать её мне на мыло или оставить тут?
Тоже не могу обнаружить ссылку для скачивания. Пришлите, пожалуйста, на почту.
Заранее спасибо!
Заранее спасибо!
Вы можете оставить комментарий