Internacionalización i18n en CodeIgniter
0Qué es lo que vamos a obtener en este tutorial?
Vamos a poder solventar tener tu aplicación web o simplemente web en diferentes idiomas, con el siguiente formato.
- dominio.com/es/
- dominio.com/en/
- dominio.com/cz/
Usaremos la clase Language de CodeIgniter y las librería ci_i18n_library de Maestric
Una vez que te descargues la librería ci_i18n_library, tienes que poner los archivos MY_Language.php y MY_Config.php en system/application/libraries
Configuración
Tienes que usar pretty URL, sin index.php. Si usas Apache, lo normal es que uses mod_rewrite en .htaccess
Aquí dejo un archivo .htaccess modificado para la ocasión
Options +FollowSymlinks RewriteEngine on
RewriteCond %{REQUEST_URI} (index\.php|webroot/|images/|css/|js/|robots\.txt|favicon\.ico)
RewriteRule ^(images|css|files|js)/(.*)$ webroot/$1/$2 [L]
RewriteRule ^(favicon\.ico)$ webroot/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
En el archivo config.php tenemos que modificar:
$config['base_url'] que debe corresponder a tu configuración
$config['index_page'] = ”
En config/routes.php añadimos
// URI like '/en/test' -> use controller 'test' $route['^es/(.+)$'] = "$1"; $route['^en/(.+)$'] = "$1"; // '/en' and '/es' URIs -> use default controller $route['^es$'] = $route['default_controller']; $route['^en$'] = $route['default_controller'];
Cómo usarlo?
Archivos de idioma
system/application/language/english/test_lang.php
<?php $lang['test_hello'] = "hello";
system/application/language/spanish/test_lang.php
<?php $lang['test_hello'] = "hola";
Controlador
system/application/controllers/test.php
<?php
class Test extends Controller {
function index()
{
// Esto se podría poner en autoload
$this->load->helper('language');
$this->load->helper('url');
// archivo de idioma
$this->lang->load('test');
$this->load->view('test');
}
}
Vista
system/application/views/test.php
<p><?php echo lang('test_hello') ?></p>
Notas
Para obtener el idioma actual
$this->lang->lang();
Para cambiar de idioma
anchor($this->lang->switch_uri('en'),'English');