i18n en xHarbour

Una nueva característica que ha pasado casi desapercibida en la versión 0.81 de xHarbour es la de internacionalización de la aplicación. La internacionalización – i18n porque entre la i y la n hay 18 letras – de una aplicación supone tener herramientas automáticas para traducir cualquier literal que muestre la aplicación en las distintas lenguas a las que se la quiera traducir. Muchos lenguajes modernos incorporan herramientas de i18n, que son muy apreciadas por los programadores de un mundo cada vez más globalizado.

Si no tenemos herramientas de i18n podemos hacer la traducción de los mensajes de varias maneras:

  • incrustando la i18n en el código, es decir meter todos los literales en el código y mostrando unos u otros en función de una variable. Esto es una auténtica burrada, con perdón.
  • almacenando los literales en un RC. En este caso lo normal es tener un RC para cada lengua a la que traduzcamos nuestra aplicación, aunque también podremos tenerlos juntos en el mismo RC y elegir cual mostrar. En cualquier caso en el programa tendremos que recuperar la cadena del RC para mostrarla. En el caso de tener que mostrar una etiqueta haremos algo como esto:
    REDEFINE SAY PROMPT LoadString(GetResources(),1164) ID 20 OF oDlg
    REDEFINE SAY PROMPT LoadString(GetResources(),1163) ID 21 OF Odlg
    

    ¿ Problema ? Que codificamos a ciegas, pues ¿ cual es la cadena 1164 ? Tenemos que estar continuamente pasando del editor de código al editor de recursos para saber que estamos diciendo al usuario y además llevar cuidado de no repetir cadenas. Un rollo.

Ahora en xHarbour 0.81 cada cadena a i18n la pasamos como parametro a una función que se llama precisamente i18n(), con lo que tenemos algo asi:

REDEFINE SAY PROMPT i18n("Introduzca la materia") ID 20 OF oDlg
REDEFINE SAY PROMPT i18n("Materia:")              ID 21 OF Odlg</p>

El lenguaje nos proporciona herramientas para generar un diccionario de terminos a traducir y realizar la traducción de los mismos. Una vez traducido el diccionario, lo único que tenemos que hacer desde nuestra aplicación es seleccionar el lenguaje en que mostraremos los mensajes.

xHarbour va pareciendo cada vez más un lenguaje moderno.