miércoles, noviembre 22, 2006

Internationalization

Para explicarlo concisamente, creo que lo mejor es responder una serie de preguntas, después, les dejo el ejemplo para que lo bajen y analicen.


¿Qué es
internationalization?

Cuando desarrollamos, aunque sea el sistema para el videoclub de la esquina, siempre es más conveniente que tratemos de hacerlo lo más prolijo posible, de manera de que no debamos gastar demasiado tiempo en "mantenimiento" del código (por no decir arreglar lo que hicimos mal). La característica de internacionalización de Java nos ayuda bastante a la hora de mostrar y de recibir datos en nuestras pantallas (J2SE - J2EE indistintamente).

¿Por qué y cuándo debería usarlo?


En la documentación oficial y en la mayoría de los tutoriales, vamos a encontrar que deberíamos utilizar internationalization cuando nuestra aplicación va a ser utilizada por personas de diferentes países o culturas (monedas y forma de representar métricas por ejemplo).
Lo cierto es que va mucho más lejos la cosa. Pienso que deberíamos utilizarla por el simple hecho de que nos va a ser más simple en un futuro agregar esta condición (por más de que no esté planteado desde el principio del desarrollo), además, recuerden esta regla:
LOS REQUERIMIENTOS VAN A CAMBIAR!!!
Se los aseguro, por experiencia propia, lo que hoy llaman "Representante", mañana lo van a llamar "Agente", ¿por qué? van a preguntar Uds., la respuesta será: "Porqué nuestro nuevo consultor de imagen dijo que será cool...".

¿Dónde debería usarlo?

Esta pregunta es de más fácil respuesta. Como regla general, nunca deberíamos tener una salida (ya sea por consola, por objeto swing o por navegador) que no sea "internacionalizada". Tratar de no dar mensajes al usuario del estilo System.out.println("Cantidad de dinero en la cuenta: $"+dinero);

¿Cómo se usa?

En el siguiente gráfico se los muestro:


Resulta que por cada idioma que queramos incorporar a nuestra aplicación, necesitaremos un archivo .properties donde definiremos las etiquetas y mensajes en el idioma adecuado. Ahora, deben tener en cuenta el nombre de los archivos. Donde dice "MessageBoundle" puede ir lo que Uds. quieran, pero por cada definición de lengua y país, deberá especificar en el nombre del archivo estas características (por ejemplo "es" de español en "AR" por Argentina).
De esta manera, cuando quieran incorporar otra lengua a la aplicación, lo único que deberemos definir será un nuevo archivo de propiedades.

¿Qué son los Resource Bundles y Locales?

Básicamente, tenemos en Java 2 Clases: ResourceBundle y Locale. La primera clase representa un recurso externo, es decir, un archivo de propiedades.
La segunda, identifica un lenguaje y un país en particular, su constructor recibe 2 parámetros: el primero es un String que indica el lenguaje, y el segundo, es otro string que indica el país.

La idea es crear un objeto del tipo Locale para representar el país y lengua a utilizar, y con este objeto, instanciar un ResourceBundle, que nos servirá para obtener del archivo de propiedades, cada una de las etiquetas respectivas.

Su uso es bastante sencillo, les dejo el código fuente para que lo prueben, allí encontrarán un poco más de detalle.

Links:


Fuentes: download

Algunos artículos de utilidad:


Saludos PF

2 Comments:

At 2:46 p. m., Anonymous Anónimo said...

Me entere del sitio y no podia dejar de visitarlo, realmente excelente.
Ya me lei casi todos los post y la verdad que es muy interesante todo y muy bien explicado sobre todo para los que recien comenzamos, felicitaciones y segui asi...

Un abrazo.

Lucas F.

 
At 5:57 p. m., Blogger Pablo Frias said...

¿El mismisimo Lucas F. que del proyecto LayerD?
Muchas gracias Lucas, no creo que merezca tantos elogios, pero gracias igual.

Saludos

 

Publicar un comentario

<< Home