Symfony i18n con gettext
Publicado en Frameworks, Programación el 5 de December de 2009 por Manel Pérez MataTags: Symfony
Symfony permite varios métodos para internazionalizar nuestra aplicación. Por defecto, utilizan el formato XLIFF sin embargo, personalmente me gusta más gettext.
¿Cómo configurar symfony para usar gettext?
Para configurar symfony para que utilice gettext seguiremos los siguientes pasos:
1) Activamos el módulo I18N modificando el archivo settings.yml:
#apps/<appName>/config/settings.yml
all:
.settings:
charset: utf-8
i18n: on
standard_helpers: [ [TUS_HELPERS_ACTIVADOS]..., I18N]
2) Abrimos el archivo factories.yml y añadimos la entrada i18n:
#apps/<appName>/config/factories.yml
all:
i18n:
class: sfI18N
param:
default_culture: en_US
source: gettext</pre>
3) Crearemos una carpeta i18n dentro de apps/
apps/<appName>/i18n/<lang>
Donde <lang> será el idioma en dos letras (en, es, fr…) y dentro tendremos los ficheros messages.po y messages.mo.
Ahora podemos utilizar la función __( ‘texto_a_traducir’ ) con doble underscore [ _ ] en lugar del simple utilizado normalmente.
¿Cómo generar automáticamente nuestros ficheros po y mo?
Symfony trae una serie de herramientas que nos permiten generar los archivos po y mo de manera automática. Invocando el comando:
symfony i18n:extract frontend en --auto-save
Se recorrerá todos los archivos php de nuestra aplicación (código y templates) y sacará los textos que encuentre en las funciones __().
También se puede utilizar el mismo comando de la siguiente manera:
symfony i18n:extract frontend en --auto-delete
para eliminar las cadenas de texto que ya no existen.














(4.33 out of 5)
January 5th, 2010 14:50
Gracias por tus articulos tienen lo justo y lo necesario y sobre todo compartes muy buena informacion.
Ya que hace mucha falta en la web
April 13th, 2010 22:08
Gracias zosoppelin,
me alegro que los posts sean de interes y/o utilidad.
May 17th, 2010 13:06
Lo 1º, gracias por el artículo.
Para generar automáticamente las traducciones en un XML (XLIFF) se utilizan los mismos comandos que para los gettext, además, se pueden juntar ambos comandos en uno para hacerlo más rápido (donde “en” es el código ISO del idioma que vamos a traducir, y “frontend” es la aplicación, podríamos poner también por ejemplo “backend”):
php symfony i18n-extract –auto-save –auto-delete frontend en
Y algo importante que no se comenta en el artículo, después de cualquier cambio en estos archivos, debemos limpiar la caché de nuestra aplicación con el comando:
php symfony cc