Urls multiidioma en Zend Framework

Hoy en día es poco habitual realizar un desarrollo web en un único idioma. Para controlar el idioma a mostrar en nuestra página solemos utilizar parámetros en la url que permitan enlazarnos externamente en el idioma deseado.

Si utilizas Zend Framework, la definición de routers te permitirá manejar este problema sin dificultades. Como ejemplo, trabajaremos con un router que enlaza con la página principal, pero se puede replicar el ejemplo a los routers que desees o a un formato genérico tipo :module/:controller/:action

Nuestro router tendría esta pinta:

1
2
$route = new Zend_Controller_Router_Route(':language',array('controller' => 'index','action' => 'index'));
$router->addRoute('home', $route);

En el init de nuestro action añadiremos estas líneas:

1
2
3
4
$language = $this -> _getParam('language');
$adapter = new Zend_Translate('gettext', '../languages/'.$language.'.mo',$language);
$adapter -> setLocale($language);
Zend_Form::setDefaultTranslator($adapter);

Y listo. A partir de este momento si el parámetro indicado como language es “es” o “en” cargaremos el fichero de idioma indicado. Controlando el valor de $language podemos confirmar que el parámetro es uno de nuestros idiomas definidos (comprobando que forma parte de un array de idiomas, por ejemplo) o forzar un valor por defecto cuando el valor de $language es vacío.

3 comentarios

  1. Javier Seixas
    20 diciembre, 2008 a las 22:50 | Permalink

    ¡Muy muy interesante! Tengo que lograr aplicar algo así en mi Framework. ¡Qué grande es ZF!

  2. Xavier
    25 febrero, 2009 a las 13:05 | Permalink

    Hola, me podrías ayudar? Cómo podría aplicarlo en una estructura modular? Cuando la url es midominio.com/fr/admin me da error ‘Invalid controller specified (fr)’! Admin es un modulo. Gracias.

  3. admin
    25 febrero, 2009 a las 14:37 | Permalink

    pues depende de como tengas montado el bootstrap y los routers.

    si quieres nos lo puedes enviar a iuttu@iuttu.com

Deja tu comentario

Tu correo nunca será compartido. Los campos marcados con * son obligatorios

*
*