Я использую CI версии 2.1 и недавно установил интернационализацию CodeIgniter 2.1 i18n (оригинальный автор: Jérôme Jaglale).Инструкции по коду приведены здесь: http://codeigniter.com/wiki/URI_Language_Identifier/
Он работает нормально, но я хотел бы переопределить язык по умолчанию, если пользователь установил свои языковые предпочтения при предыдущем посещении веб-сайта (это будет храниться в таблице вбаза данных).
Мой вопрос, как вы это делаете?
Я считаю, MY_Lang.php
(где загружен язык по умолчанию) на самом деле загружается ДО CodeIgniter MY_Controller
, поэтому яневозможно загрузить базу данных, чтобы определить, есть ли у пользователя предпочтительный язык.
Язык по умолчанию настроен в MY_Lang.php
здесь:
function default_lang()
{
$browser_lang = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtok(strip_tags($_SERVER['HTTP_ACCEPT_LANGUAGE']), ',') : '';
$browser_lang = substr($browser_lang, 0,2);
$default_lang = array_splice(array_keys($this->languages), 0,1);
return (array_key_exists($browser_lang, $this->languages)) ? $browser_lang : $default_lang[0];
}
Однако я не могу переопределить его, потому чтоздесь у меня нет доступа к моему $this->session->userdata('language')
Заранее спасибо!
ОТВЕТ ЗДЕСЬ:
Узнал, чтоВы можете использовать собственные PHP-куки для чтения куки в файле MY_Lang.php
.Если вы попытаетесь использовать cookie-помощник, он не будет работать, поэтому убедитесь, что вы используете вместо этого $ _COOKIE и запускаете соответствующие фильтры, прежде чем получать содержимое.
Затем в MY_Lang.php
просто измените это:
return (array_key_exists($browser_lang, $this->languages)) ? $browser_lang : $default_lang[0];
На это:
if($_COOKIE['int_lang']) {
$preferred_lang = filter_var($_COOKIE['int_lang'], FILTER_SANITIZE_STRING);
return (array_key_exists($preferred_lang, $this->languages)) ? $preferred_lang : $default_lang[0];
}
else
{
return (array_key_exists($browser_lang, $this->languages)) ? $browser_lang : $default_lang[0];
}