Мне нужно реализовать способ переключения языков на веб-сайте, разработанном с помощью Codeigniter. Я знаю, что у Codeigniter есть библиотека для управления языковыми файлами, и это то, что я пытаюсь использовать. Но так как мне также нужно иметь возможность изменять переведенный текст, я храню переводы в базе данных и генерирую языковые файлы Codeigniter с помощью запроса следующим образом:
<?php
$LANGCI =& get_instance();
$lang_query = $LANGCI->db->where('lang', 'italian')->get('my_lang');
foreach ($lang_query->result() as $language_data) {
$lang[$language_data->index] = $language_data->translation;
}
Это на самом деле работает, поэтому, когда я звоню:
<?=$this->lang->line('label_about_us')?>
отображается на языке, указанном в файле конфигурации.
Теперь я хочу изменить язык, нажав на ссылку. Поэтому я создал контроллер "languages" с этой функцией внутри:
public function set_language($lang)
{
$this->session->set_userdata('language', $lang);
$this->config->set_item('language', $lang);
redirect('');
}
работает и корректно меняет как данные сеанса, так и файл конфигурации. Проблема в том, что я загружаю язык в контроллер следующим образом:
$this->lang->load('my');
и он просто получает язык, указанный в файле конфигурации, без учета языка, который я установил с помощью своей функции.
Итак, через некоторое время я понял, что могу загрузить язык следующим образом:
$this->lang->load('my', $this->session->userdata('language'));
и это работает. Проблема в том, что я не могу поместить эту строку в файл автозагрузки. На самом деле, я не могу поставить $ this-> lang-> load ('my'); либо, так как он говорит, что нет объекта БД.
Итак, следуя этой логике, есть ли другой лучший способ изменить язык, не шутя с URL?