Estás en el camino correcto. Querrá crear un archivo de idioma sobre la marcha (por ejemplo, cada vez que actualice el contenido de idioma de su base de datos)
Primero:el diseño de la base de datos
Crear una tabla lang_token
con columnas id
, category
, description
, lang
, token
y llene sus campos así:
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:Acerca de los archivos de idioma de CodeIgniter
CodeIgniter buscará primero en su directorio de aplicación/idioma. Cada idioma debe almacenarse en su propia carpeta. Asegúrese de tener sus subdirectorios en inglés o alemán, etc. creados, p. application/language/english
Tercero:función de controlador para crear un archivo de idioma sobre la marcha
Acerca de los archivos de idioma de Codeigniter:Es una buena práctica usar un prefijo común (categoría) para todos los mensajes en un archivo determinado para evitar colisiones con elementos con nombres similares en otros archivos. La estructura es como:$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);
}
Notas finales:
- Cada vez que cambie su base de datos, llamará a la función
updatelangfile(‘english’)
-
No olvides cargar el asistente de archivos y clase de idioma en el constructor del controlador donde se encuentra updatelangfile():
function __construct(){ parent::__construct(); $this->load->helper('file'); $this->lang->load('general', 'english'); }