Internacionalización automática con Struts2
La internacionalización es el proceso de diseñar software de manera tal que pueda adaptarse a diferentes idiomas y regiones sin la necesidad de realizar cambios de ingeniería ni en el código [1]. El poner a disposición del usuario los datos y la información en el idioma que él prefiere (Idioma del navegador web que usa) facilita el uso y entendimiento de las aplicaciones y específicamente en este caso, de las aplicaciones web. Ya anteriomente se explicó cómo crear una aplicación básica con Struts2 y en esta oportunidad mostraré la manera de cómo usar el interceptor i18n para la internacionalización de aplicaciones java web.
Lo primero que necesitamos crear un proyecto web en Netbeans y agregar las librerías que listo a continuación.
Lo primero que necesitamos crear un proyecto web en Netbeans y agregar las librerías que listo a continuación.
- struts2-core-2.1.8.jar
- xwork-core-2.1.6.jar
- ognl-2.7.3.jar
- freemarker-2.3.15.jar
- commons-logging-1.0.4.jar
- commons-fileupload-1.2.1.jar
Cabe resaltar que todos los archvios de este proyecto se encuetran disponibles al final de este post. La manera de preparar nuestro espacio de trabjo la detallo a continuación mediante imagenes en donde muestro paso a paso cada punto a tener en cuenta.
Iniciamos el asistente de proyectos de Netbeans y seleccionamos un proyecto Java Web.
Seleccionamos Glassfish como servidor de aplicaciones.
Para esta oportunidad no vamos a usar ningún framework por lo que simplemente dejamos todo por defecto y hacemos clic en el botón finalizar.
Al finalizar el asistente, este debería quedar como la figura siguiente:
En la carpeta raiz del proyecto debemos crear una carpeta lib que contendrá todas las bibliotecas necesarias para poder desplegar nuestro proyecto.
Luego de agregar todas las bibliotecas debería quedarnos algo como esto:
Hecho esto, ahora debemos agregar estas bibliotecas a nuestro proyecto haciendo clic en Libraries y luego en Add JAR/Folder.
Seleccionamos los archivos que copiamos en la carpeta lib.
Luego creamos el archivo descriptor web.xml para realizar las configuraciones de nuestro proyecto.
Y también el archivo de configuración de struts.
Y ahora creamos un paquete que contendrá los actions.
Y nuestra clase que se encargará de la lógica del negocio.
Y también un archivo JSP que nos indicará que la autenticación se realizó correctamente.
Y ahora el archivo de propiedades que va a contener todos los mensajes y etiquetas que serán personalizables por idioma.
El contenido de este archivo será el siguiente:
Y para poder decirle a struts que deberá leer las etiquetas de nuestro archivo debemos hacer lo siguiente:
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><s:text name="aplicacion.titulo"/></title> </head> <body> <h1><s:text name="login.titulo"/></h1> <s:form action="Login"> <s:textfield name="usuario" key="etiqueta.usuario"/> <s:password name="clave" key="etiqueta.clave"/> <s:submit key="etiqueta.submit"/> </s:form> <h3><font color='red'><s:actionerror/></font></h3> </body> </html>
Y para poder crear el archivo de propiedades en idioma Inglés debemos copiar el archivo mensajes.properties y renombrarlo como mensajes_en.properties.
Y el contenido quedaría como lo muestra la siguiente figura:
Al desplegar la aplicación deberíamos obtener algo como se ve en la figura de abajo, dependiendo del idioma en el que está configurado nuestro navegador.
Eso sería todo por esta vez. En un siguiente post les mostraré cómo hacer que el idioma se muestre de acuerdo a lo que el usuario quiere, sin importar el idioma del navegador.
Todos los archivos del proyecto los pueden descargar aquí:
Espero que les sea de utilidad y no se olviden de seguir este blog a través de su página de facebook.
Muy buen aporte;
ResponderBorrarAún hoy día sigue salvando el culo a gente como yo, esto me lo habían explicado en un curso, pero ahora lo he pillado mucho mejor. Gracias. Me gustaría ver el siguiente post sobre el tema pero no lo encuentro. si me pasas el enlace te lo agradecería