Я создаю многоязычный онлайн-сайт с Codeigniter. Мой вопрос заключается в том, как передавать данные из базы данных в файлы языка Codeigniter . Моя логика до сих пор заключается в выполнении запроса foreach
, который заполняет языковой файл с помощью функции translation_key и значения. Проблема в том, что языковые файлы не являются некоторыми расширенными классами CI_class, и теперь я не знаю, как двигаться дальше.
Как бы вы приблизились к этой проблеме? Документация не говорит ничего о том, как использовать языковой класс с базой данных.
Ты на правильном пути. Вы захотите создать языковой файл «на лету» (например, всякий раз, когда вы обновляете содержимое языка вашей базы данных)
1-й: расположение базы данных
Создайте таблицу lang_token
со столбцами id
, category
, description
, lang
, token
и заполните их поля следующим образом:
CREATE TABLE IF NOT EXISTS `lang_token` ( `id` int(11) NOT NULL AUTO_INCREMENT, `category` text NOT NULL, `description` text NOT NULL, `lang` text NOT NULL, `token` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `lang_token` (`id`, `category`, `description`, `lang`, `token`) VALUES (1, 'error', 'noMail', 'english', 'You must submit a valid email address'), (2, 'error', 'noUser', 'english', 'You must submit a username');
2nd: О файлах языка CodeIgniter
CodeIgniter будет выглядеть первым в вашем каталоге приложений / языков. Каждый язык должен храниться в его собственной папке. Убедитесь, что у вас есть ваши английские или немецкие и т. Д. Подкаталоги, созданные, например, application/language/english
3rd: функция контроллера для создания языкового файла на лету
О файлах языка Codeigniter. Рекомендуется использовать общий префикс (категорию) для всех сообщений в данном файле, чтобы избежать столкновений с аналогичными именованными элементами в других файлах. Структура похожа: $lang['category_description'] = “token”;
function updatelangfile($my_lang){ $this->db->where('lang',$my_lang); $query=$this->db->get('lang_token'); $lang=array(); $langstr="<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * * Created: 2014-05-31 by Vickel * * Description: ".$my_lang." language file for general views * */"."\n\n\n"; foreach ($query->result() as $row){ //$lang['error_csrf'] = 'This form post did not pass our security checks.'; $langstr.= "\$lang['".$row->category."_".$row->description."'] = \"$row->token\";"."\n"; } write_file('./application/language/'.$my_lang.'/general_lang.php', $langstr); }
Заключительные замечания:
updatelangfile('english')
Не забудьте загрузить вспомогательный файл и языковой класс в конструкторе контроллера, где находится updatelangfile ():
function __construct(){ parent::__construct(); $this->load->helper('file'); $this->lang->load('general', 'english'); }