plone.app.multilingual: multilingüismo de nueva generación para Plone
En el resumen de la Plone Conference 2012 que hicimos la semana pasada, omitimos de forma interesada la charla de Ramon Navarro y Victor Fernández de Alba sobre plone.app.multilingual.
Si hay un producto que hayamos utilizado en cada una de nuestras webs ese es LinguaPlone el estandar de facto para hacer webs multilingües. Sin embargo, y tras las diversas actualizaciones de Plone y la incorporación de nuevos patrones de desarrollo, muy dirigidos a programar utilizando la Arquitectura de Componentes de Zope (ó ZCA por sus siglas en inglés), LinguaPlone se había quedado atrás. Tras un sencillo diseño, había una implementación basada en un hack: parchear el catálogo para filtrar todas las peticiones (menús de navegación, búsquedas, etc) respecto al idioma seleccionado, y una implementación basada en relaciones para unir unas traducciones con otras. Sin embargo LinguaPlone tenía un pero: no funcionaba para Dexterity, el nuevo sistema para crear objetos (sustituto de Archetypes), lo que impedía de facto hacer ninguna web multilingüe utilizando Dexterity.
En Arnhem, y tras un tiempo de desarrollo, Ramón y Víctor presentaron plone.app.multilingual, que quiere convertirse en sustituto de LinguaPlone y además funcionar para Dexterity. Además, realiza una novedosa implementación, utilizando un registro central para gestionar las traducciones, evitando el concepto de traducción canónica y sin sobrecargar los objetos con enlaces o anotaciones innecesarias. Además, se ha diseñado el producto con la ZCA en mente, por lo que casi todos los extremos del producto son personalizables creando los correspondientes adapters. Así, por ejemplo, se puede decidir que cuando queramos visitar una traducción de un objeto no traducido, se muestre una pantalla de aviso o que vaya a la traducción más cercana en el árbol de contenidos. O también, que se decida de forma invidualizada dónde guardar la traducción (en vez de guardar la traducción en la traducción correspondiente al contenedor en el que está el objeto.
Sin duda, plone.app.multilingual viene para quedarse y, sin duda también, será uno de los productos que más utilizaremos de aquí en adelante. Tras Localizer y LinguaPlone, será nuestra herramienta de trabajo de ahora en adelante.