Mensajes multi-idioma en Java

0
36405

Aplicaciones Internacionalizadas en Java

Cuando diseñamos una aplicación Java, tenemos que tener en cuenta tanto las necesidades actuales como futuras de nuestra aplicación. 

Es posible que pensemos que nuestro programa solo necesita mostrar mensajes en nuestro idioma local (en este caso castellano) pero, con mucha probabilidad, en un futuro cercano deba funcionar en otros ….. pongase Ingles, Catalán, etc 

Una vez completada una aplicación, sin tener este factor en cuenta, el coste
de internacionalizarla y realizar las prubas de regresión puede ser muy elevado
o incluso …. puede ser necesario un rediseño completo.

Java, propociona un conjunto de clases para facilitarnos esta labor…

 

Locale

Un Locale representa una región concreta … podemos ver la seleccionada
actualmente.

La salida actual es:

Y todas las actualmente definidas (las hemos importado en excel)

Crear una nueva localización

Vamos a crear una localización que represente España

La salida del programa es

Ficheros de recursos para cada idioma

En siguiente paso sería crear una mecanismo para que en función del idioma,
se utilice un juego particular.

Podemos crear un fichero de propiedades, que tengan la misma clave y un valor
distinto para cada idioma. Solo tenemos que tener la precaucion de saber como
nombrarlos….

Recurrimos a la ayuda Java

Nos ayudamos de NetBeans para crear el fichero de propiedades 

Seleccionamos el nombre

Añadimos una versión «localizada»

Seleccionamos Español de España

Comprobamos que se ha creado y pulsamos el botón de nueva
propiedad

Creamos una nueva propiedad  (ver que tenemos seleccionado
la versión local españona)

Podemos editar la tabla para cambiar el texto en la inglesa

Realmente se han creado dos ficheros en el sistema

Si vemos el Ingles tiene este aspecto

# Sample ResourceBundle properties file

#Este es el saludo de bienvenida
SALUDO=Hello Word

Y el castellano

# Sample ResourceBundle properties file

#Este es el saludo de bienvenida
SALUDO=Hola compa\u00F1eros

Si ejecutamos nuestro programa

La salida es


MessageFormat, Mensajes con parámetros variables

Normalmente los mensajes no son solo texto sino que hay que intercalar
variables dentro del mensaje.

Todo esto ya esta pensado ….

Podemos definir en nuestra cadena de caracteres … por indice basado en 0

Es decir … del tipo

Hello Word, user number {0} of today, day {1}

Modificamos nuestro código … podemos recuperar la cadena y crear un
formateador

       MessageFormat
fCadenaFormatear = new MessageFormat(recursos.getString(«SALUDO»));       

Creamos un array

       Object
aoParametros[] = {«1»,new Date()};   

 Y decimos que se combinen ambos

fCadenaFormatear.format(aoParametros)

En el caso de la cadena en castellano, podemos decir que los objetos se
formatéen, usando los parámetros locales

       fCadenaFormatear.setLocale(lCastellano);
 

La salida, podemos ver que aparece tal y como deseamos.

Cadena Formateada en Ingles Hello Word, user number 1 of today, day 7/18/03 8:57 AM
Cadena Formateada en Castellano es Hola eres el usuario 1 de hoy, dia
18/07/03 8:57

Podemos especificar el formato con más detalle

Modificando la cadena, sin modificar el programa

Hello Word, user number {0,number,
#,000.##
} of today, day {1,date,short}

La salida es:

Cadena Formateada en Ingles Hello Word, user number 001 of today, day
7/18/03
Cadena Formateada en Castellano es Hola eres el usuario 1 de hoy, dia 18/07/03 9:29

Sobre el
Autor ..

Dejar respuesta

Please enter your comment!
Please enter your name here