sábado, 14 de abril de 2012

Jasper multilanguage i18n / Multiidioma en jasper i18n

Muchas veces hemos tenido la necesidad de crear informes y hacerlos multiidioma de una forma sencilla, en este articulo os mostraré una forma fácil y comoda de hacerlo.

Nuestra aplicación debe manejar la internacionalización de la forma que mas nos convenga (este no es el objeto del artículo, ya que cada framework provee diversas formas de hacerlo), incluso nuestra app si no usa ningún framework puede definir la forma de manejar esta internacionalización.

Debemos definir 2 cosas para poder definir nuestros informes multiidioma:

  • Nuestros ficheros multidioma i18n
Debemos definir un fichero por cada idioma que queramos proveer en nuestra aplicación, como por ejemplo:

Fichero 'fichero18n_es_ES.properties'
saludo=Hola

Fichero 'fichero18n_en_EN.properties'
saludo=Hello

Como vemos, se definen dos ficheros i18n, uno para español (es_ES) y otro para inglés (en_EN) con una clave 'saludo'.

Debemos asegurarnos de poner estos ficheros accesibles a través del classpath, si no nuestra aplicación no podrá localizar dichos ficheros.

  • Definir un parámetro en cada generación de informes y pasarlo al motor Jasper
params = new HashMap<String, Object>();
params.put("REPORT_LOCALE", Locale);

Pasamos un objeto java.util.Locale con la localización que nos interese.

Una vez que hemos definidos estos puntos, en nuestro jasper (jrxml) podemos indicar líneas como esta:

<textFieldExpression class="java.lang.String"><![CDATA[ResourceBundle.getBundle("fichero18n", $P{REPORT_LOCALE}).getString("saludo")]]></textFieldExpression>

Esto es gracias a que lo que añadamos dentro de un textFieldExpression será evaluado por Jasper como una expresion Java, de este modo, una vez que cambiemos el Locale en nuestra aplicación jasper automáticamente cargará los mensajes en el Locale apropiado (o el por defecto si no existe un fichero i18n para el Locale especificado).

Facil, ¿No?. Espero que a alguien le ayude :)

No hay comentarios:

Publicar un comentario