Traducir una página JSF con Java

TraducirCon la penetración que está teniendo el Internet en todo el mundo, cada vez es más importante traducir nuestras páginas web, debido a que los visitantes ya pueden venir de cualquier parte del mundo, es por eso que los sitios más importantes o que buscan captar visitantes de otras regiones, permitan a sus usuarios cambiar de idioma.

Pueda que de entrada parezca algo muy complicado o laborioso de hacer, sin embargo, es mucho más simple de lo que te puedas imaginar.

 

Para explicar cómo funciona la Internacionalización (I18N), lo explicaremos mediante un ejemplo simple pero eficaz, implementaremos una página de Login, la cual se verá de la siguiente manera:

 

Traducir

El código completo lo puedes descargar de GitHub (https://github.com/oscarjb1/Blog-TranslateApp.git).

 

Básicamente, esta página nos permitirá cambiar entre inglés y español, seleccionando el idioma deseado en la parte superior derecha de la pantalla. Tras seleccionar el nuevo idioma, la página de recargara con el nuevo idioma.

 

Veamos cómo es que esto es posible. Primero que nada, será necesario crear un archivo properties por cada idioma que soportará nuestra aplicación. Para nuestro ejemplo, solo requerimos de dos archivos como se ven a continuación:

 

messages.properties:

Contiene las traducciones por default, en este caso Ingles.

 

 

message_es_ES.properties:

Contiene las traducciones en español. Prestemos atención en el nombre, pues es sumamente importante, la primera parte message  podría tener cualquier valor, pero todos los idiomas soportados deberán iniciar con el mismo nombre., sin embargo, lo que viene a continuación es sumamente importante para identificar el idioma, la segunda sección es  indica el idioma (español) y la tercera parte ES  el país (España).

 

Podemos observar que las traducciones en inglés, no requieren país ni idioma, pues los hemos configurado como el idioma default, esto quiere decir que este idioma se utilizara en caso de no tener una coincidencia para el idioma del usuario.

 

Para configurar el idioma default, es necesario definirlo en el archivo faces-config.xml y deberá quedar de la siguiente manera:

 

 

Básicamente definiremos el idioma default ( <default-locale> ) y los idiomas soportados ( <supported-locale>). La sección <base-name> debe de coincidir con el paquete en el que están los archivos de traducción, junto con la primera sección del nombre (messages). De esta forma JSF sabe, basado en este path + el idioma y el país, es posible determinar el archivo exacto a utilizar.  Finalmente, le indicamos que las traducciones las pase a una variable ( <var> ) llamada msg.

 

Por otra parte, tenemos el archivo JSF donde creamos la presentación:

 

Observemos que todos los valores traducibles están con la sintaxis #{msg[property]} , donde property es el nombre de la propiedad a traducir de los archivos de traducción.

La traducción se dispara cuando cambiamos el idioma en el componte, selectOneMenu el cual dispara un evento que es escuchado por el Bean LoginBean , el cual vemos a continuación:

 

 

Cuando un nuevo idioma es seleccionado el método changeLang es ejecutado y el nuevo idioma es establecido mediante la línea:

viewRoot.setLocale(new Locale(newValue.toString()));

Después de esto, la pantalla es recargada con el nuevo idioma. Es tan simple como eso.

 

NOTA: Los estilos para que la página se vea tal cuan aparece en la imagen, los puedes descargar del repositorio de GitHub que menciona anteriormente.

Artículos relacionados

Patrón de Diseño Factory Esta entrada formara parte de un conjunto de entradas dedica específicamente a explicar los diferentes patrones de diseño que existe. El patrón de di...
Ordenar Listas en Java Si eres programador seguramente te has encontrado con el problema de Ordenar Listas, pero ¿Estamos utilizando la solución correcta o estamos reinventa...
Que es el Polimorfismo? Si son nuevos en la programación seguramente esta palabra les causar dolor de cabeza ya que desde mi punto de vista esta es la caracterizara del parad...

Oscar Blancarte

Ideológico, Innovador y emprendedor, Padre, Tecnólogo y Autor, amante de la ciencia y la tecnología en todos sus colores y sabores. Arquitecto de software & Full Stack Developer con experiencia en la industria del desarrollo de software y la consultoría. Amante de la programación y el Ajedrez.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *