El Blog de Trespams

Blog personal sobre tecnologia, gestió de projectes i coses que se me passen pel cap

i18n

Fer aplicacions multi-idioma és emprenyívol, molt emprenyívol. S'ha de tractar per una banda la traducció dels texts, i sovint s'ha de treballar també amb la localització de la informació, és a dir, en l'adaptació dels continguts a les peculiaritats de cada idioma. El primer problema és bàsicament tècnic, el segon ja requereix d'un coneixement més profund del llenguatge i de la cultura cap a on ens adreçam.

A Java la part de traducció dels missatges es tracta a partir d'arxius de recursos, és un mètode senzill, basat en text i amb un seguit d'utilitats de tercers per fer més senzilla la traducció. Tot i permetre treballar amb un repositori de control de versions, fer aplicacions web multi-idioma en Java no és gens net.

Per altra banda amb Python i moltes aplicacions  fan servir gettext per tractar amb la internacionalització d'aplicacions. En aquest cas m'he trobat que les eines que tenim al nostre abast són molt més potents de les que havia trobat per Java.

De les que he provat la que més m'ha agradat és el Kbabel, del projecte Kde, ja que a més d'una interfície cuidada, integra diccionaris, traduccions automàtiques basades en el que ja hi ha, gestió de catàlegs, integració amb svn i cvs, i un llarg etcètera que encara estic descobrint.

Per la seva banda Django té força ben resolt el tema de la internacionalització mitjançant la utilització d'un conjunt de llibreries per gettext i utilitats per extreure les cadenes a traduir i generar el corresponent catàleg de missatges. Si ho integram amb el projecte Babel, també fet amb Python, tenim una combinació més potent de la que duu de sèrie Django, ja que permet identificar millor el que volem traduir, ja que Django per defecte tracta projectes sencers.

El que sí m'he trobat és amb un problema amb Django, la internacionalització i les cachés de pàgina. No distingeix entre pàgines que estiguin en el mateix lloc però que estiguin en diferent idioma si no és canviant-ne la URL. La solució pareix prou senzilla: canviar el codi de generarció de claus de la caché per a que tengui sempre en compte el llenguatge, i sols implica canviar dues línies a Django. Una altra opció és utilitzar un middleware per canviar les claus de les cachés pel nostre lloc web, implica, però que no podrem gestionar el temps de caché per pàgina, sinó que tirarem de la caché global.

Una vegada resolts aquests entrebancs, que supòs que s'aniran millorant així com més gent de parla no anglesa utilitzi Django, la incorporació dels elements d'internacionalització a les nostra aplicació web Django és força senzilla, i fins i tot està preparat per tractar amb casos de plurals complexos o girs diferents en un o altre idioma.

Per saber-ne més:

Eines i utilitats:

blog comments powered by Disqus