Para implementar un jsp recuperando los literales de un fichero de propiedades y de esta manera internacionalizar nuestra web utilizaremos las librerias de JSTL (JSP Tag Library) que es un componente dentro de la especificación J2EE.
En primer descargaremos los jars de aquí, necesitaremos los llamados jstl-api-x.x.jar y jstl-impl-x.x-jar.
Los añadiremos al directorio WEB-INF/lib de nuestro proyecto.
Ahora en la página jsp objeto de nuestra implementación añadimos los tag libs antes de la etiqueta <html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
Los ficheros de lenguas los pondremos en WEB-INF/classes/bundle/ y tendrán la nomenclatura :
lang_es.properties, lang_es.properties por ejemplo para el caso de dos ficheros uno en español y otro en inglés.
Se tratan de ficheros clásicos de propiedades en estructura de clave - valor.
Antes de la etiqueta <head> de nuestra página incluimos este código :
<c:if test="${param.locale!=null}">
<fmt:setLocale value="${param.locale}" scope="session"/>
</c:if>
<fmt:setBundle basename="bundle.lang"/>
Será el encargado de comprobar si nos llega un parámetro de una pagina previa correspondiente a la variable locale que nos indicara la lengua seleccionada, en caso afirmativo le setearemos la variable a nivel de session para que durante toda la navegación tengamos el idioma seleccionado, en caso contrario, que no nos llegue ningún idioma predeterminado previamente, cogeremos por defecto el que esté configurado en el navegador.
Mediante setBundle le indicamos donde están estos ficheros de idiomas.
Ahora es tan fácil como, en vez de hardcodear los literales en nuestro código, hagamos referencia a ellos mediante el tag :
<fmt:message key="saludo"/>
Donde saludo se refiere a la clave que contiene el valor saludo, en este caso es bastante lógico que se trate de "Hello" o "Hola".
Una pequeña ayuda en el caso que tengamos funciones javascript que contengan también literales y sea externa a nuestra página, si decidimos tener un solo método para internacionalizar nuestra pagina, podemos recuperar los valores de nuestros literales de la misma manera mencionada anteriormente y recogerlos en variables globales de javascript que luego utilizaremos desde cualquier función que las requiera, por ejemplo :
<script type="text/javascript">
var lun="<fmt:message key="Fecha.Lunes"/>";
</script>
La variable lun ya contendrá el valor adecuado según nuestro mecanismo de selección de idioma y se generará de forma dinámica al aplicar cualquier cambio.
No hay comentarios:
Publicar un comentario