Este ejemplo es para aquellos que quieren tener su página web en diferentes idiomas y no quieren que el idioma se muestre en la URL, para lo cual son indispensables las sesiones.
Primero creamos un archivo en el Core, el cual va a extender de CI_controller y así ahorrarnos varias lineas de código, ya que en este archivo estaremos haciendo el cambio de idioma.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class BaseController extends CI_Controller
{
public $data = array();
function __construct() {
$this->data["headline"] = "HeadLine del BaseController";
parent::__construct();
// aca establesemos la sesion de idioma, "lang".
// notese que en este caso nuestro idioma por defecto será el español, porque la primera vez la sesion no está establecida
// por lo cual se ejecuta el else.
if ($this->session->userdata('lang') == 'en') {
$this->config->set_item('language', 'english'); //esto cambia el archivo de configuracion config[language] = "english";
$this->lang->load('datos', 'english'); //cargamos los archivos que agregamos a /system/language/english
} else {
$this->config->set_item('language', 'spanish'); //esto cambia el archivo de configuracion config[language] = "spanish";
$this->lang->load('datos', 'spanish'); //cargamos los archivos que agregamos a /system/language/spanish
}
}
//la funcion current_page la utilizaremos para saber desde que página se hizo click para cambiar el idioma.
//la sesion que utilizamos es "current_url" y debemos colocarla en la primera línea de cada función en nuestros controllers
function current_page()
{
$this->session->set_userdata('current_url', $this->uri->uri_string());
}
}
?>
Creamos un controller en el cual tendremos las funciones de cambio de idioma, en este caso el nombre es Categoria.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Categoria extends BaseController {
function __construct() {
parent::__construct();
}
public function espanol() {
$this->session->set_userdata(array('language' => TRUE, 'lang' => 'es')); //establecemos la sesion lang en "es"
$current_url = $this->session->userdata('current_url'); //la sesion establecida en BaseController
//comprobamos que la sesion tenga la url desde donde se quiere cambiar al idioma español,
if (isset($current_url) && $current_url != '') {
redirect($this->session->userdata('current_url')); //redireccionamos a la url desde donde se hizo el cambio de idioma
}
else
$this->index(); //cargamos la funcion index de este controller.
}
public function english() {
$this->session->set_userdata(array('language' => TRUE, 'lang' => 'en')); //establecemos la sesion lang en "es"
$current_url = $this->session->userdata('current_url');
if (isset($current_url) && $current_url != '') {
redirect($this->session->userdata('current_url'));
}
else
$this->index();
}
public function index($someslug="") {
$this->current_page(); //siempre colocamos esta función de BaseController en la primera línea de las funciones
$this->data["title"] = "Inicio"; //titulo para la vista
//hacemos unas querys o algo y luego cargamos la vista
$this->data["main_content"] = "inicio/login";
$this->load->view("template/layout", $this->data);
}
Creamos una vista para login, en este caso es sólo parte del ejemplo, no le pusimos ningun tipo de utilidad.
<div>
<fieldset>
<legend><?php echo $this->lang->line('titulo_form_post'); ?></legend>
<?php echo form_open('categoria/index');?>
<div>
<label><?php echo $this->lang->line('Nombre_de_Usuario'); ?></label>
<input name="user" size="30" type="text" value="<?php echo set_value('user'); ?>" />
<div class="error"><?php echo form_error('user');?></div>
<label><?php echo $this->lang->line('Password'); ?></label>
<input name="password" size="30" type="password" value="<?php echo set_value('password'); ?>" />
<div class="error"><?php echo form_error('password');?></div>
<div><input class="input-submit" type="submit" value="Submit" /></div></fieldset>
</div>
<?php echo form_close();?>
</fieldset>
</div>
También tenemos el layout que es parte de nuestra forma de trabajar con plantillas, en esta vista le ponemos los links a las funciones de cambio de idioma, estos links deben de ser mostrados en todas las pantallas de nuestra web, es recomendable colocarlas en el header.
<?php
$this->load->view('template/header');
<div id="language">
<?php
echo anchor('categoria/espanol', 'Ver la Página en Español');
?>
</br>
<?php
echo anchor('categoria/english', 'Display current page in English');
?>
</div>
$this->load->view($main_content);
$this->load->view('template/footer');
?>
Bueno eso es todo lo que puedo mostrarles sobre una página multilanguage, espero que todo haya quedado claro, y si tienen alguna duda, o algun error en el código que publiqué, sientanse libres de preguntar.