Páginas Web Multi-idioma en JSP con las librerias JSTL
Sin duda un valor añadido muy importante para un portal Web es que éste se encuentre traducido a varios idiomas. De esta manera llegaremos a más cantidad de personas. Si tu portal está desarrollado con tecnología Java, llevar a cabo la internazionalización no será costoso. Existen librerias como JSTL que nos ayudarán con nuestro propósito.
Lo primero que deberemos hacer para utilizar la potencia de las librerias de etiquetas (tag libraries) JSTL será descarganos sus librerias desde su página oficial.
En el momento de escribir este tutorial estas son las versiones disponibles:
Una vez descargadas tendremos que añadir las librerias a nuestra carpeta “lib” de nuestro proyecto. Posteriormente también descomprimiremos el fichero jar jstl-impl y dejaremos las plantillas “.tld” en algún lugar dentro del CLASSPATH de nuestra aplicación web. Yo por ejemplo las he dejado en el directorio WEB-INF.
La internacionalización de las páginas se consigue mediante ficheros de propiedades, donde se irán definiendo para propiedad su valor en el idioma deseado.
Veamos mis 2 ficheros de propiedades para el idioma español y para el idioma inglés:
Messages_es.properties
TITLE= Mi título de JSP TEMPLATE.STRING1= Secuencia del mensaje 1 TEMPLATE.STRING2= Secuencia del mensaje 2 TEMPLATE.STRING3= Secuencia del mensaje 3 |
Messages_en.properties
TITLE=My JSP title TEMPLATE.STRING1=Message string 1 TEMPLATE.STRING2=Message string 2 TEMPLATE.STRING3=Message string 3 |
Para terminar la configuración, deberemos modificar el fichero web.xml para hacer uso de las tag libraries:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <jsp-config> <taglib> <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri> <taglib-location>/WEB-INF/fmt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/core</taglib-uri> <taglib-location>/WEB-INF/c.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri> <taglib-location>/WEB-INF/c-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri> <taglib-location>/WEB-INF/sql.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri> <taglib-location>/WEB-INF/sql-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/x</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri> <taglib-location>/WEB-INF/x-rt.tld</taglib-location> </taglib> </jsp-config> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> |
Ya solo nos queda modificar las páginas JSP para que se muestren en un idioma u otro según queramos:
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Pagina MultiIdioma</title> </head> <body> <c:set var="locale" value="es" /> <fmt:setLocale value="${locale}" scope="session"/> <fmt:setBundle basename="Messages" scope="session" /> <fmt:message key="TEMPLATE.STRING1" /><BR> <fmt:message key="TEMPLATE.STRING2" /><BR> <fmt:message key="TEMPLATE.STRING3" /><BR> <c:set var="locale" value="en" /> <fmt:setLocale value="${locale}" scope="session"/> <fmt:setBundle basename="Messages" scope="session" /> <fmt:message key="TEMPLATE.STRING1" /><BR> <fmt:message key="TEMPLATE.STRING2" /><BR> <fmt:message key="TEMPLATE.STRING3" /><BR> </body> </html> |
El resultado de visualizar la página anterior en cualquier navegador sería:
Secuencia del mensaje 1 Secuencia del mensaje 2 Secuencia del mensaje 3 Message string 1 Message string 2 Message string 3 |