Internacionalización de Programas Java

Si echaste un vistazo al c�digo fuente internacionalizado, observar�as que los mensajes en ingl�s dentro del c�digo han desaparecido. Como estos mensajes ya no est�n dentro del c�digo, y como el codigo del idioma se especifica en el momento de la ejecuci�n, el mismo ejecutable puede ser distribuido por todo el mundo. No se requieren recompilaciones para su localizaci�n, Nuestro programa ha sido internacionalizado.

Te podr�as preguntar que ha sucedido con el texto de los mensajes, o que entendemos por los c�digos de idioma y de pa�s. No te preocupes. Te explicaremos todos estos conceptos cuando pasemos a trav�s del proceso de internacionalizaci�n del programa de ejemplo.

.�Crear el Fichero de Propiedades

Un fichero de propiedades almacena informaci�n sobre las caracter�sticas de un programa o un entorno. Estos ficheros de propiedades tienen formato de texto plano. Se pueden crear con cualquier editor de textos.

En nuestro ejemplo, el fichero de propiedades almacena los textos traducibles de los mensajes que deseamos mostrar. Antes de que nuestro programa fuera internacionalizado, las versiones inglesas de los mensajes fueron codificadas dentro de sentencias System.out.println. Nuestro fichero de propiedades por defecto, que se llama MessagesBundle.properties, contiene las siguientes l�neas.

greetings = Hello
farewell = Goodbye
inquiry = How are you?

Ahora que los mensajes est�n en un fichero de propiedades, podemos traducirlos a varios idiomas. No se necesita modificar el c�digo fuente. Nuestro traductor de Franc�s, ha creado un fichero de propiedades llamado MessagesBundle_fr_FR.properties, que contiene estas l�neas.

greetings = Bonjour.
farewell = Au revoir.
inquiry = Comment allez-vous?

Observa que los valores situados a la derecha de los signos igual "=" han sido traducidos, pero las claves del lado izquierdo del signo no han cambiado. Estas claves no deben cambiar, porque el programa se referir� a ellas cuando recupere el texto traducido.

El nombre del fichero de propiedades es importante. El nombre del fichero MessagesBundle_fr_FR.properties contiene el c�digo del idioma fr y el c�digo del pa�s FR. Estos c�digos tambi�n se utilizan cuando se crea un objeto Locale.

.�Definir la Localidad

Un objeto Locale define un idioma particular y un pa�s. La siguiente sentencia define un objeto Locale para el idioma Ingl�s y el pa�s de Estados Unidos.

aLocale = new Locale("en","US");

El siguiente ejemplo crea objetos Locale para el idioma franc�s en Canada y Fr�ncia.

caLocale = new Locale("fr","CA");
frLocale = new Locale("fr","FR");

Queremos mantener flexible el programa de ejemplo, por ello, en vez de codificar los c�digos de idioma y de pa�s en el c�digo fuente, los obtenemos de la l�nea de comandos en el momento de la ejecuci�n.

String language = new String(args[0]);
String country = new String(args[1]);
currentLocale = new Locale(language, country);

Los objetos Locale son s�lo identificadores. Despu�s de definir un objeto Locale, se lo pasas a otro objeto que realiza las tareas �tiles, como formatear fechas y n�meros. Estos objetos se llaman sensibles a la localidad, porque su comportamiento var�a de acuerdo a la localidad. Un ResourceBundle es un ejemplo de objeto sensible a la localidad.

.�Crear un objeto ResourceBundle

Los objetos ResourceBundle contienen objetos espec�ficos de una localidad. Estos objetos ResourceBundle se utilizan para aislar los datos sensibles a la localidad, como texto traducible, etc. En nuestro programa de ejemplo, el ResourceBundle est� constituido por los ficheros de propiedades que contienen los mensajes que queremos mostrar.

Nuestro objeto ResourceBundle se crea de esta forma.

message = ResourceBundle.getBundle("MessagesBundle",currentLocale)

Los argumentos pasados al m�todo getBundle identifican a los ficheros de propiedades a los que queremos acceder. El primer argumento, MessagesBundle, se refiere a esta familia de ficheros de propiedades.

MessagesBundle_en_US.properties
MessagesBundle_fr_FR.properties
MessagesBundle_de_DE.properties

El objeto Locale, que es el segundo argumento de getBundle, espec�fica el fichero elegido de MessagesBundle. Cuando se cre� el objeto Locale, se le pasaron al constructor los c�digos del idioma y del pa�s. Observa que estos c�digos forman parte del nombre de los ficheros de propiedades de MessagesBundle.

Ahora, todo lo que tenemos que hacer es traducir los mensajes de ResourceBundle.

.�Recuperar el texto del ResourceBundle

Los ficheros de propiedades contienen parejas clave/valor. Los valores consisten en texto traducido que nuestro programa mostrar�. Espec�ficaremos las claves cuando querramos utilizar los mensajes traducidos del ResourceBundle con el m�todo getString. Por ejemplo, para recuperar el mensaje identificado por la clave "greetings", llamar�amos a getString de esta forma.

String msg1 = messages.getString("greetings");

En nuestro ejemplo, utilizamos la clave greetings porque refleja el contenido del mensaje, podr�as haber utilizado cualquier otro String, como s1 o msg1. S�lo recordar que la clave debe est�r escrita en tu programa y que debe estar presente en los ficheros de propiedades. Si tu traductor modifica accidentalmente las claves de los ficheros de propiedades, getString no podr� encontrar los mensajes.

Esto es todo. Como puedes ver, internacionalizar un programa no es demasiado d�ficil. S�lo requiere algo de planificaci�n, y un poco de c�digo extra, pero los beneficios son enormes. El ejemplo que hemos cubierto en esta secci�n ha sido intencionadamente sencillo porque quer�amos proporcionarte una introducci�n al proceso de internacionalizaci�n. El API de Java ofrece muchas m�s capacidades de internacionalizaci�n que las descritas en esta secci�n. Explicaremos esos t�picos en mayor detalle en las siguientes secciones.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP