11:02 hrs. ~ 0 Comments

Crear web con Codeigniter 2.0 en varios idiomas

Esto va a ser un ejemplo simple de una web con zona de administración que maneje varios idiomas gracias a la libreria i18n adaptada al Codeigniter 2.0 basado en PHP 5. Aunque el ejemplo este basado en la libreria que podeis encontrar en esta web: www.maestric.com El problema la configuración propuesta ahi no funciona para las nuevas versiones de Codeigniter, para ello necesitamos otra version de la libreria modificada por un usuario webwerken del foro de Codeigniter.

En resumen podreis tener algo asi:

  • http://www.yourdomain.com/en/controller/function/
  • http://www.yourdomain.com/es/controller/function/

El código fuente completo functional basado en el Codeigniter 2.0.3 podeis bajar de AQUI. Solo teneis que descargarlo en vuestro servidor para que funcione. Ojo, los enlaces amigables estan activados, es un requisito imprescindible para su funcionamiento. Por ello teneis que tener el mod_rewrite y AllowOverride All activados.

La librería i18n en si misma esta localizada dentro de la carpeta application/core (En vez de application/libraries de la version anterior) y consta de 3 archivos readme.txt, MY_Config.php y MY_Lang.php. Dentro de MY_Lang.php he añadido esta función:

private $default_language = 'fr';
public function get_languages()
    {
        return $this->languages;
    }
 // languages
    private $languages = array(
        'en' => 'english',
        'de' => 'german',
        'fr' => 'french',
        'es' => 'spanish'
    );

Si necesitáis añadir un idiomas mas, tenéis que agregarlo ahí, así como crear una carpeta “french” dentro de application/language. También cabe destacar el vector llamado $special, en el cual tenéis que añadir carpetas que no queréis que estén localizadas. Por ejemplo la zona de administración, de hecho esta agregado el valor admin. Así cuando accedemos hasta http://www.yourdomain.com/admin/login/ no se nos redirecciona a ningún lado y este controlador no se traduce a diferentes idiomas. Tenéis controladores agregados de ejemplo.

También he introducido siguiente cambios:

//Nueva variable
$private default_language = 'fr';

//Cambio de nombre al constructor
public function __construct()

//Modificación de esta function:
function default_lang()
	{
		return $this->default_language;
	}

En el fichero routes.php que podéis encontrar en application/config tenéis que añadir esto, ademas de vuestras propias rutas, básicamente es lo mismo que antes, pero con expresiones regulares resumidas en dos lineas en vez de 8


$route['^(es|de|en|fr)/(.+)$'] = "$2";
$route['^(es|de|en|fr)$'] = $route['default_controller'];

Los ejemplos de uso de la localización, podéis encontrar en:

  • application/controllers/about
  • applications/views/about

Ademas os recomiendo visitar la pagina web del autor original, por si me he dejado algo, aunque viendo el ejemplo del código que es realmente simple creo que es mas que suficiente. También importante en caso de problemas, leer el hilo dentro del foro de Codeigniter, ya que mas de uno tiene problemas con rutas.

Leave a Reply