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