Вие сте на прав път. Ще искате да създадете езиков файл в движение (например всеки път, когато актуализирате езиковото съдържание на вашата база данни)
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');
2-ро:Относно езиковите файлове на CodeIgniter
CodeIgniter ще търси първо в директорията на вашето приложение/език. Всеки език трябва да се съхранява в собствена папка. Уверете се, че имате създадени поддиректории на английски или немски и т.н., напр. application/language/english
3-то:Функция на контролера за създаване на езиков файл в движение
Относно езиковите файлове на 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'); }