Cuando ejecutamos nuestra aplicación en el navegador, lo ideal sería que los textos salgan en el idioma del navegador o que el usuario pueda cambiar el idioma a su gusto.
La internacionalización es la capacidad de un sitio web para estar disponible en diferentes idiomas. Tiene que ver con la “Accesibilidad” ya que al hacer nuestro sitio web multi-idioma, estamos abriendo la posibilidad de que personas alrededor del mundo, con otros idiomas, puedan acceder a nuestra aplicación.
En páginas JSP, implementar la internacionalización es posible gracias a la librería fmt de JSTL (Java Standard Tag Lib). Aquí los pasos para implementar la Internacionalización usando JSTL:
Implementación
1.- Registrar fmt.- Teniendo la librería JSTL en nuestro proyecto, registrar la librería fmt:
<%@ taglib uri="jakarta.tags.core" prefix="c"%>
<%@ taglib uri="jakarta.tags.fmt" prefix="fmt" %>
2.- Crear los ficheros de idiomas.- Se debe crear un fichero de texto con extensión “properties”, por cada idioma que queramos traducir nuestra aplicación. Los ficheros pueden tener cualquier nombre pero seguido de _xx_YY, donde xx es el nombre del idioma (por ejemplo, es para Español, en para Inglés) y YY es el país (por ejemplo, es_ES para español de España y en_UK para inglés de Ingraterra).
Los ficheros deben almacenarse en un paquete. Este paquete se lo denomina “bundle” pero puede tener cualquier nombre, como por ejemplo: recursos. Ejemplo:
java/main/recursos/idioma_es_ES.properties
java/main/recursos/idioma_en_UK.properties
Dentro de cada fichero se indica una clave y su valor. La clave es el texto que usaremos en código de las páginas web y el valor es el texto que visualizaremos. Por ejemplo, el contenido del fichero en Español e Inglés se muestra a continuación:
#idioma_es_ES.properties
title.login.form=Formulario Login
#idioma_en_UK.properties
title.login.form=Login Form
3.- Usar fmt:message en JSP
Primero indicamos dónde están los ficheros. Para esto usamos la etiqueta de fmt:setBundle de JSTL
<fmt:setBundle basename="recursos.idioma" />
Solo ponemos el nombre sin poner la parte _xx_YY. A continuación, usamos la etiqueta para imprimir para desplegar los textos:
<h1><fmt:message key="title.login.form"/></h1>
Esto mostrará el título del formulario como: “Formulario Login”, si el idioma del navegador es Español y “Login Form” si el idioma del navegador es Inglés.
Elección del idioma
Es posible también que el usuario seleccione el idioma en el que quiere ver la página web. Para esto, debemos poner visible las opciones de idioma que maneja nuestra aplicación:
<a href="texto.jsp?locale=en">ingles</a>
<a href="texto.jsp?locale=es">español</a>
<a href="texto.jsp?">auto</a>
Ahora, cada vez que el usuario seleccione una opción, se envía el parámetro “locale” y lo debemos capturar para configurar el idioma seleccionado por el usuario. Para configurar el idioma seleccionado, usumos la etiqueta setLocale:
<c:if test="${param.locale!=null}">
<fmt:setLocale value="${param.locale} scope=”session" />
</c:if>
<fmt:setBundle basename="recursos.idioma" />
Si el parámetro seleccionado es null es porque el usuario ha seleccionado el idioma “automático”, es decir, del navegador. Si el parámetro no es null, entonces se configurará el idioma indicado por el parámetro “locale”.