Publicar Artículos
Gratis

Descubre las ventajas de publicar tus artículos en Internet... ¡Consigue Tráfico Gratuito y Enlaces de Calidad!


Cómo extraer cadenas de la carpeta plugins de Symfony 1.0 a los ficheros XLIFF

Ver como PDF | Vista para Imprimir | Vista en Html
por: adrian
Visualizaciones totales: 68
Número de palabras: 854
Fecha: Fri, 30 Jul 2010 Hora: 8:59 AM

Los que trabajamos con Symfony 1.0 a menudo nos encontramos ante problemáticas complejas sobre cómo resolver algo que aparentemente tiene fácil solución. Así es el caso que nos trae a este artículo. Disponemos de múltiples herramientas para trabajar con XLIFF, un comando para extracción de cadenas, etc., pero todo ello limitado a la posibilidad de hacer conversiones entre tipos, extraer sólo las cadenas de la carpeta apps y sus aplicaciones (otro etc.). En muchos casos necesitaremos extraer también las cadenas de la carpeta plugin, o incluso las carpetas lib, y no podremos. Desconozco realmente si en versiones superiores a Symfony 1.0 ésto está resuelto, o al menos es más sencillo llevarlo a cabo. Os cuento como lo he resuelto yo.

Necesitas:

- Instalar en tu aplicación el plugin sfI18nExtractPlugin, que pondrá a tu disposición la task (tarea) que te permitirá extraer las cadenas.

- Tener gettext instalado en tu sistema.

- Tener po2xliff instalado en tu sistema.

- Que tu proyecto tenga control de versiones.

Para extrear las cadenas de tu aplicación ejecutarás:

php symfony i18n-extract {nombre_de_tu_aplicación} {cultura}

He aquí el problema: Dicho comando te limita sólo a extraer las cadenas de alguna de las aplicaciones de las que dispongas, pero no ofrece manera alguna de extraer cadenas de otras carpetas. Ésto, como ya sabrás, es un poblema, ya que es habitual que los módulos de plugins contentan textos que se muestran en la web.

De igual modo, ejecutaremos el comando. El resultado será un archivo por cada cultura que indiques dentro de apps/{nombre_de_tu_aplicación}/i18n con el formato messages.{cultura}.xml. Es importante que hagamos esto, ya que necesitaremos el archivo para más adelante.

A partir de ahora las soluciones no son muy limpias, pero funcionan. Se trata de extraer con gettext todas las cadenas traducibles de la aplicación. Para ello, necesitamos que el formato con el que se introdujeron las cadenas no sea __(""), sino _("") (un guión al principio, en lugar de dos). No indagué mucho en si había alguna manera de decirle al gettext que extraiga las cadenas dentro de una función dada, así que si álguien sabe como se hace, agradezco que me lo comente. Para ello, hacemos un buscar y reemplazar en todo el proyecto.

Buscar: __(

Reemplazar por: _(

Una vez reemplazadas todas las apariciones de __(, lanzamos gettext para que genere un fichero con todos los textos de las rutas que nosotros le digamos. Éste es el script que yo uso:

#!/bin/bash
find /var/www/miweb/symfony/apps/portal/ -name '*.php' -print >> ficheros_con_textos
find /var/www/miweb/symfony/apps/portal/ -name '*.js' -print >> ficheros_con_textos
find /var/www/miweb/symfony/lib/model/ -name '*.php' -print >> ficheros_con_textos
find /var/www/miweb/symfony/plugins/ -name '*.php' -print >> ficheros_con_textos
find /var/www/miweb/symfony/web/js/ -name '*.php' -print >> ficheros_con_textos

xgettext --from-code=UTF-8 --files-from=ficheros_con_textos
rm ficheros_con_textos

po2xliff messages.po -o messages.es.xml
po2xliff messages.po -o messages.en.xml

En las líneas finales del script se llama al conversor de archivos PO  a XLIFF por cada archivo de idioma que queramos.

¡Ya tenemos nuestros messages.{cultura}.xml generados! Ahora necesitamos hacer dos cosas muy importantes.

- Deshacer los cambios hechos en la aplicación: ésto es, que todas las funciones i18n vuelvan a ser __( en lugar de _(, ya que de lo contrario las traducciones no funcionarán y es posible que la aplicación falle.

- Actualizar los ficheros messages.{cultura}.xml con los que acabamos de generar: No podremos copiarlos sin más a la carpeta apps/{nombre_de_tu_aplicación}/i18n (por eso era importante generar esos archivos con la herramienta de Symfony en primer lugar). Tenemos que coger el contenido entre las etiquetas <body> de los archivos que acabamos de generar, e insertarlo entre las etiquestas </body> de los archivos que generamos al principio.

¡Y voilá! Tus textos de las carpetas plugins, libs, etc. al fin se traducen con los XLIFF globales.

Sobre el Autor...

Programador Senior PHP.



Comentarios

Ningún comentario.

Añadir Comentario

You do not have permission to comment. If you log in, you may be able to comment.

Menú Principal
Gestiona tu cuenta...

Como mejorar tus articulos

Publi-Articulos.com
Categorías...

Categorías

9 users online.

Tiempo de carga de la Página:0.10seg.