Clase Locale: Localizando nuestras aplicaciones Java
Posted on December 21st, 2007 in Programación | 2 Comments »
Vivir en un mundo globalizado hace que las plataformas tecnológicas cuenten con formas de definir en que parte del mundo vivimos ayudando al desarrollador a no tener que lidiar con las diferencias regionales para asà centrarse exclusivamente en su código. En java existe una clase llamada Locale que nos permite especificar la región geográfica, polÃtica y cultural en la que nos encontramos.
A pesar de su importancia, pocas veces es explicada o enseñada en los cursos de programación, por lo que a veces no se toma en cuenta ni se considera el valor que por defecto que se asigna provocando problemas e inconsistencias en nuestras aplicaciones.
Definir una clase localizada es muy sencillo, podemos usar cualquiera de los siguientes constructores:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
El primer argumento es el código ISO idioma (ISO-639), seguido del código del paÃs (ISO-3166) y puede terminar con un argumento sobre variantes especificas del sistema operativo o explorador.
Por ejemplo si queremos definir un LOCALE para México, serÃa.
Locale loc = new Locale("es","MX");
Existen muchas clases que tienen operaciones sensibles a la localización, por ejemplo las que nos ayudan a dar formato a números y fechas.
odemos obtener la fecha en forma de texto en español usando la clase DateFormat
Date d = new Date();
DateFormat df1 = DateFormat.getDateInstance(DateFormat.LONG, new Locale("es"));
DateFormat df2 = DateFormat.getDateInstance(DateFormat.LONG, new Locale("es","MX"));
DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG, new Locale("en","US"));
System.out.println(df1.format(d));
System.out.println(df2.format(d));
System.out.println(df3.format(d));
Que nos imprime:
21 de diciembre de 2007
21 de diciembre de 2007
December 21, 2007
Es muy importante siempre considerar la localización al crear nuestras aplicaciones, por ejemplo incluso al imprimir fechas de forma corta el formato cambia de paÃs en paÃs lo cual puede provocar confusión entre algunos usuarios:
Date d = new Date();
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, new Locale("es","MX"));
DateFormat df2 = DateFormat.getDateInstance(DateFormat.SHORT, new Locale("en","US"));
System.out.println(df.format(d));
System.out.println(df2.format(d));
21/12/07
12/21/07
Como vemos, en español primer va el dÃa y después el mes. En ingles el mes va primero.
No tenemos que olvidarnos de los valores por defecto. Al instanciar una clase sensible a la Localización sin indicarle ningún Locale, esta tomara el Local por defecto en el sistema.
Locale l = Locale.getDefault();
System.out.println(l);//imprime es_MX, el locale por defecto
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);//tomara el locale es_MX
¿Y de donde sale esta configuración? Sale de los paneles de configuración regional y de idioma dentro del panel de control de Windows.
Esto puede ser un verdadero problema. Por ejemplo detectamos hace tiempo que un código que usaba la librerÃa JExcel iimprimÃa los valores de monedas con sÃmbolo de Euro en vez de usar el de Pesos. Verificando rápidamente el locale descubrimos que estaba configurada con en paÃs España e idioma español (es,ES) y que esta aplicación era sensible a la localización. Como es imposible estar configurando cada una de las computadoras clientes, fue muy fácil definir a la librerÃa el Locale con el que querÃamos trabajar
WorkbookSettings ws = new WorkbookSettings();
ws.setLocale(new Locale("es","MX");
Evitando asÃ, que tome un Locale por defecto.
NumberFormat es otra clase que también nos permite definir la localización, y no solo nos ayuda al definir los sÃmbolos, sino también la posición de las comas e indentaciones propias de cada paÃs.
Toma en cuenta que si estas trabajando con aplicaciones web, el Locale por defecto no es el que defines en el servidor, sino el Locale que manda tu navegador.
Java y los servidores de aplicaciones te ofrecen muchas herramientas que te permitirán localizar correctamente tus aplicaciones por lo que es importante aprender a manipularlas y utilizarlas correctamente de acuerdo a las necesidades de nuestras aplicaciones y a su alcance en el mundo. Y aun, si el alcance es solo dentro de nuestra oficina, es importante definir como queremos que se comporte y evitar comportamientos no deseados.
Códigos de idioma: http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt
Códigos de paises: http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
Locale API: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Locale.html



2 Responses
Gracias por tu pequeño ejemplo , eso de cambiar los idiomas en base a funciones va OK, pero mi duda es si tengo un boton que dice “HOLA”, al cambiar de idioma por el panel de control y seleccionando como pais EEUU, como hago para que en ves de “HOLA” diga “WELCOME”
[...] #2 Re: Consulta Internacionalizacion (Clase Locale) Leete esto: http://www.novacreations.net/303-cla…caciones-java/ [...]