Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/05/2008, 08:40
Avatar de Barinas
Barinas
 
Fecha de Ingreso: agosto-2004
Ubicación: Caracas, Venezuela
Mensajes: 14
Antigüedad: 19 años, 9 meses
Puntos: 0
Re: Manejar multiples idiomas Code Igniter

Hola,

La verdad no se si esta sea la mejor manera pero se me ocurre que...

Seguramente la informacion por idiomas a nivel de db las separas a nivel de tablas.. por lo tanto yo me idearia alguna clase de regla para mis tablas, asi como tu mencionas

tablas en ingles

tabla1_en
tabla2_en

tablas en español

tabla1_es
tabla2_es

A nivel de vista seguro tendras cosas en ambos idiomas que no estaran en la base de datos entonces los nombres de las vistas igual

vistas en ingles

vista1_en.php
vista2_en.php

vistas en español

vista1_es.php

Usando el sistema de sessiones de codeigniter puedo cambiar el idioma sin tener que modificar las url

Modificaria la clase controller que esta en la carpeta libraries que es la que se inicializa con cada request.. añadiendo un atributo que defina el lenguaje y una condicion if a la funcion constructora que lo cambie en caso de existir un lenguaje definido en una variable de session.

Código PHP:

class Controller extends CI_Base {

    var 
$_ci_scaffolding    FALSE;
    var 
$_ci_scaff_table    FALSE;
        
/* El Atributo que define el lenguaje */
    
var $lenguaje "es";
    
/**
     * Constructor
     *
     * Calls the initialize() function
     */
    
function Controller()
    {    
        
parent::CI_Base();
        
$this->_ci_initialize();
        
log_message('debug'"Controller Class Initialized");
        
                
/* Aqui pregunto si hay un lenguaje definido por sesion
                    de haber sido definido, lo cambio */
        
if ($this->session->userdata('lenguaje') ){
            
$this->lenguaje $this->session->userdata('lenguaje');
        }
    }
.......
...... 
Entonces dicha variable $this->lenguaje estaria disponible en todos los controladores por herencia, permitiendote cargar las vistas de esta manera

Código PHP:
$this->load->view('folder_name/file_name_'.$this->lenguaje); 
Tambien podrias tener una estructura de vistas asi:

es/vista1.php

en/vista1.php

y llamarlas asi

Código PHP:
$this->load->view($this->lenguaje.'/file_name'); 
Lo mismo haria con la constructora de model y asi al hacer las consultas, si usas active record queria la estructura asi

Código PHP:
$query $this->db->get('mitabla_'.$this->languaje); 
Sino tus selects asi

Código PHP:
$sql "SELECT * FROM mitabla_$this->lenguaje ..... " 
Para cambiar el idioma solo tienes que manipular la variable de sesion a traves de un controlador. y redireccionar para que el cambio sea efectivo

Puedes crear un metodo al controlador principal que haga esto, o en el controlador que consideres y hacer que el usuario cambie el idioma con la url o con botones dentro del mismo site

Las posibilidades son muchas, hay que jugar y probar, lo mejor seria adaptar la idea sin tocar mucho la estructura del framework...

Saludos

Última edición por Barinas; 06/05/2008 a las 08:50