Symfony i18n con gettext

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.

3 thoughts on “Symfony i18n con gettext

  1. 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
    😀

  2. 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

Comments are closed.