El uso de resource bundles puede ser una herramienta poderosa para implementar la internacionalización (i18n) en aplicaciones JSF 2.0. Los resource bundles permiten a los desarrolladores almacenar mensajes y títulos localizados en un archivo separado, al que se puede acceder fácilmente en páginas JSF. La configuración de resource bundles en JSF es bastante sencilla y, una vez configurados, los desarrolladores pueden acceder a los mensajes y títulos localizados con facilidad.
En este artículo, analizaremos el uso y la configuración de los resource bundles en JSF 2.0 y cómo se pueden usar para hacer que una aplicación JSF sea accesible para usuarios de todo el mundo.
Es deseable evitar escribir los mensajes ubicados en las vistas directamente en las páginas. Un resource bundle consta de un archivo de texto con extensión .properties conteniendo los mensajes de la aplicación en forma de pares clave/valor, y facilitan en mantenimiento de la aplicación al mantener los mensajes en un solo lugar. El archivo properties debe estar ubicado en la carpeta resources del proyecto. En nuestro ejemplo el archivo es el que sigue:
El siguiente paso es declarar el resource bundle en la aplicación. Si se necesita que sea accesible por cualquier página de la aplicación se debe declarar en el archivo faces-config.xml como se muestra a continuación:
En el tag <base-name> se declara el nombre del archivo y en el tag <var>se declara el nombre de la variable para hacer referencia al bundle desde las páginas.
En JSF también es posible hacer la declaración de los resource bundles para que sean accesibles localmente a una página agregando el siguiente tag a la vista correspondiente:
El primer caso muestra la forma de acceso a un mensaje con una key simple:
El segundo caso muestra que cuando la key contiene puntos en la invocacion debe ir entre corchetes:
En el tercer caso se muestra un mensaje con formato html. Es posible indicarle al componente si el mensaje se debe visualizar como texto plano con el atributo escape=»true» (valor por defecto) o si visualizarlo con formato, con escape=»false»:
El último caso muestra como parametrizar los mensajes mediante el elemento <f:param>:
Internacionalización con Resource Bundles
A continuación un ejemplo de cómo implementar la internacionalización mediante archivos properties. Se agregarán al proyecto los siguientes archivos properties en la siguiente ubicación:
En la página importamos el bundle localmente con la etiqueta f:loadBundle. En el evento change del elemento h:selectOneRadio invoca al método changeLocale() del bean.
El atributo render=»ajaxText« indica que se debe refrescar el h:outputText al finalizar la invocación vía AJAX.
El uso y la configuración de resource bundles en JSF pueden proporcionar una excelente manera de localizar una aplicación y hacerla accesible a usuarios de todo el mundo. El uso de resource bundles para almacenar subtítulos y mensajes localizados es una manera fácil y efectiva de hacer que las aplicaciones JSF soporten internacionalización. Con la ayuda de los resource bundles, los desarrolladores pueden concentrarse en crear la mejor experiencia de usuario posible para su aplicación en lugar de preocuparse por problemas específicos del idioma.