Novacreations

Desarollando Software

mundo.pngVivir 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.

 

panel2.png

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.

 

browser.png

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



5 Responses so far.

  1. Christian says:

    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. […] #2 Re: Consulta Internacionalizacion (Clase Locale) Leete esto: http://www.novacreations.net/303-cla…caciones-java/ […]

  3. Peter says:

    Excelente, tutorial

  4. Henser says:

    hola, interesante esta informacion muchas gracias, una cosita, en el enlace del de iso3166 que colocas arriba ambos tiene el mismo link..

  5. admin says:

    Gracias, actualicé las ligas. Saludos.


Subscribe to email feed



La fábrica de softw

La Fábrica de Software de la Dirección de Innovación y ...

Administradores de A

Durante años aplicación ES File Explorer era la mejor y ...

Apoyo del Conacyt a

El Consejo Nacional de Ciencia y Tecnología (Conacyt), como parte ...

Microsoft Surface St

Esta semana Microsoft anuncio la existencia de su nueva PC ...

Incuba tu proyecto c

¡Buscamos nuevas tecnologías! Si tu proyecto es seleccionado Telcel te otorgará ...

Las 10 funciones de

  Java 8 incluye nueva funcionalidad que nos permite tener un ...

Como usar una funci

Usar una función hash para encriptar una contraseña no es ...

Cómo escribir códi

Nunca supongas a la malicia lo que puede ser explicado ...

Las 114 preguntas de

¿Tienes una entrevista de trabajo en puerta para un posición Java? ...

Believe in technolog

Ziff Davis Publishing es la más grande editorial de contenidos ...