Monthly Archives: September 2011

Internacionalizar aplicaciones java

Continuando con los posts relacionados con i18n (internacionalización) aquí les dejo un snippet para leer archivos de propiedades, estos son usados en java para guardar texto en formato llave=valor.

ResourceBundle bundle = java.util.
                    ResourceBundle.getBundle(“ruta_archivo_properties”);

String value = bundle.getString(“llave”)

Si tenemos un archivo por ejemplo “resource.properties” en el paquete net.edokun.resources, entonces el código sería algo asi:

ResourceBundle bundle = java.util.
                    ResourceBundle.getBundle(“net/edokun/resources/resource.properties”);

los archivos properties deben tener la información arreglada de la siguiente manera:

llave1=Hola
llave2=Adios

Una vez que obtenemos el archivo con la clase ResourceBundle para obtener el texto lo hacemos con el método getString(“llave”) donde “llave” es el key en el archivo properties en este caso puede ser llave1 ó llave2 y lo que regresa es el valor, Hola o Adios según la llave.

Por ultimo, si queremos hacer nuestra aplicación internacional lo podemos hacer creando más archivos properties uno por cada idioma adicional, siempre poniendo el sufijo _CodigoLocale ejemplo:

resource_en_US.properties – para inglés
resource_ja_JP.properties -> para japonés
resource_es_MX.properties ->para español Mexico

y obviamente en cada uno el valor de las llaves está en el respectivo idioma.
Así como todos los archivos properties deben estár en la misma ruta.

 Ya solo es necesario indicarle a nuestra aplicación que idioma debe usar, para ello usamos el snippet anterior para cambiar el locale y eso es todo.

Como cambiar el idioma de tu aplicación en Java

Muchas veces cuando desarrollamos aplicaciónes queremos darle un toque mas amigable al mostrar información en el idioma del usuario, aqui les dejo un pequeño snippet para cambiar el idioma y la configuración regional para la aplicación en Java.

Dentro del bloque main y antes que todo deberá ir lo siguiente para que la aplicación cambie el locale exitosamente:

            Locale locale = null;
            //el primer parametro es el idioma, el segundo es el país, siempre en MAYUSCULAS.
            // ejemplo: es “español”, en “ingles”, US “Estados Unidos”, MX “Mexico”
            locale = new Locale(“en”,”US”);
            Locale.setDefault(locale);

Con esto todos los mensajes de java como excepciones lanzadas, el formato númerico, separador decimal, formato de fechas, etc. será ajustado a la nueva configuración regional.

Es importante recalcar que esta configuración sobreescribe el locale por defecto que se lanza cuando la JVM es ejecutada, esto quiere decir que si la JVM está instalada en una computadora con el sistema operativo en ingles, y el país es Estados unidos, por defecto la JVM siempre usará el locale en_US, pero si en nuestra aplicación lo configuramos como es_MX automáticamente nuestra aplicación funcionará con el locale distinto sin alterar otras aplicaciones java que tengamos corriendo.

Como obtener los componentes de un JFrame

Aqui les dejo un pequelo snippet para cargar todos los componentes que tiene un JFrame o JPanel (practicamente cualquier componente gráfico que herede de Container) basicamente con esto obtienen todos los componentes en un mapa el cual acceden a cada elemento desde el mapa con el nombre del elemento. como pueden ver es un método recursivo lo que hace que si hay componentes contenedores dentro del JFrame también los agregará.

public static Map getAllComponents(Container parent, Map componentsMap){
Map map;
Component[] components;

if(componentsMap==null)
map = new HashMap();
else
map = componentsMap;

components = parent.getComponents();
map.put(parent.getName(), parent);
for(int i=0; i < components.length;i++){
map.put(components[i].getName(), components[i]);
if(components[i] instanceof Container){
map = getAllComponents2((Container)components[i],map);
}
}
return map;
}