sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo crear archivos de idioma Codeigniter desde la base de datos?

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:

  1. Cada vez que cambie su base de datos, llamará a la función updatelangfile(‘english’)
  2. 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');
    }