JSP. 14 Ejemplo internacionalización


Ejemplo que soporta varios idiomas y se puede cambiar entre ellos. Para que todo funcione se necesita definir los archivos de recursos. En la carpeta del proyecto Other Sourcessrc/main/resources creamos el paquete com.me.jsp.bundle y en el se colocarán los archivos properties.

 Botón derecho sobre el paquete com.me.jsp.bundle anteriormente creado New → Other, Categories: Other, File Types: Properties File. Asignas un nombre y creas el archivo.

Netbeans nos ayuda a la hora de crear estos archivos. Una vez creado el fichero base, el archivo file.properties, nos permite crear sus versiones personalizadas.
  1. Botón derecho sobre file.properties → Add → Locale.
  2. Seleccionamos el Locale deseado. Click OK.
  3. Repetimos el paso 1 y 2 tantas veces como Locale deseemos.
  4. Una vez que hemos creado todos los Locale deseados.
  5. Botón derecho sobre file.properties → Open.
  6. Nos aparecerá una pestaña nueva. Aquí podremos ver el código de la cadena y su contenido en los distintos archivos de recursos. De esta forma crear, modificar y eliminar las cadenas es mucho más facil.

Archivo file_es_ES.properties (en mi caso file.properties es igual a este):
msg.greeting=Hola bienvenido
msg.bye=Adios
label.name=Nombre
label.require_field=Campo requerido
label.english=Inglés
label.spanish=Español
label.select_language=Seleccionar idioma
label.currency=Moneda

Archivo file_en_US.properties:
msg.greeting=Hello, wellcome
msg.bye=Bye
label.name=Name
label.require_field=Require field
label.english=English
label.spanish=Spanish
label.select_language=Select language
label.currency=Currency

Página i18.jsp:
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%-- language maneja el idioma actual --%>
<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="com.me.jsp.bundle.file" />
<html>
  
<head>
    
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
<title>JSP Curso</title>
  
</head>
  
<body>
    
<form action="index.jsp" method="POST">
      
<input type="submit" value="Volver a Menu" />
    
</form><br />
    
<h3>Internacionalización</h3>

    
<fmt:message key="msg.greeting" /><br />
    
<fmt:message key="msg.bye" /><br />
    
<fmt:message key="label.require_field" />
    
<br /><br />

    
<form>
      
<fmt:message key="label.select_language" />:
      
<select id="language" name="language" onchange="submit();">
         
<option value="es_ES"
           
<c:if test="${language=='es_ES'}">selected</c:if>>
           
<fmt:message key="label.spanish" />
         
</option>
         
<option value="en_US"
           
<c:if test="${language=='en_US'}">selected</c:if>>
           
<fmt:message key="label.english" />
         
</option>
      
</select>
    
</form>
    
<br />

    
<h3>formatNumber</h3>
    
<c:set var="numero" value="125678.4309" />
     formatNumber (1)=>
<fmt:message key="label.currency" />:
    
<%-- type= number, currency, percent --%>
    
<fmt:formatNumber value="${numero}" type="currency"/><br />

  
</body>
</html>

<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />

Si me llega un parámetro llamado language y no está vacío lo guardo en la variable de sesión language, si el parámetro está vacío busco en la variable language, si no está vacía la uso y si está vacía utilizo el locale de la petición.

Comentarios

Entradas populares de este blog

Java. Texto de colores en la consola

javax.swing.JList

javax.swing.JPasswordField