miércoles, 17 de septiembre de 2008

Internacionalizacion con java.util.ResourceBundle

Esta clase contiene objetos de acuerdo a una localidad específica. Permite que nuestra aplicación se adapte al idioma del ordenador en que se está ejecutando. Si por ejemplo, estuvieramos en una máquina con idioma español, se mostraría el mensaje "hola mundo", si fuera inglés "hello world", y asi para cada idioma que queramos personalizar.

Crear el archivo de propiedades

Como primer paso creamos un archivo con los mensajes que vamos a personalizar, por ejemplo el clásico "Hola mundo". El archivo Mensajes.properties contendrá lo siguiente:

mensaje= Hola Mundo
titulo= Saludo

Obtener una propiedad del archivo

Para cargar el archivo, se hace lo siguiente:

ResourceBundle.clearCache(); //se limpia el cache
ResourceBundle propiedades = ResourceBundle.getBundle("Mensajes");

JOptionPane.showMessageDialog(null, propiedades.getString("mensaje"), propiedades.getString("titulo"), JOptionPane.PLAIN_MESSAGE);

En este caso se mostraría una ventana con el mensaje "Hola Mundo".

Si cambiaramos el contenido del archivo Mensajes.properties a lo siguiente:

mensaje= Hello World
titulo= Greetings

El programa automaticamente sería traducido al inglés. Se mostraría una ventana diciendo "Hello World"

Esto permite que con solo cambiar el contenido del archivo .properties el programa se pueda internacionalizar, sin tener que volver a compilarlo, sin cambiar el codigo.

Para saber si existe alguna propiedad llamada saludo2 podemos hacer lo siguiente:
propiedades.containsKey("saludo2");

Obtener todas las propiedades

Enumeration llaves = propiedades.getKeys();

while (llaves.hasMoreElements()) {
String llave = (String)llaves.nextElement();
String valor = propiedades.getString(llave);
System.out.println("llave= " + llave + ", " +
"valor= " + valor);
}

Esto imprimiria lo siguiente:

llave= mensaje, valor= Hola Mundo
llave= titulo, valor= Saludo

No hay comentarios: