Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
En esta lección aprenderemos a implementar la internacionalización (i18n) en nuestras aplicaciones web desarrolladas con Struts 2. Este proceso permite mostrar textos y mensajes en diferentes idiomas según la configuración del usuario o del sistema.
Hola Mundo con internacionalización
Para habilitar la internacionalización, Struts 2 utiliza archivos de propiedades (.properties
) donde almacenamos los textos en diferentes idiomas. Configuramos el recurso en el archivo struts.xml
:
struts.xml
<constant name="struts.custom.i18n.resources" value="global" />
Archivos de propiedades
En la raíz de src
, creamos los archivos de propiedades para cada idioma:
global.properties
(por defecto)global_es.properties
(español)global_en.properties
(inglés)
src/global.properties
pagina_inicio.holaMundo = Hola mundo\!\!
Si este fichero tiene acentos, caracteres asiáticos, etc, podemos hacer que se vean correctamente utilizando la herramienta que viene entre los binarios (carpeta bin) del jdk:
native2ascii -encoding utf8 C:\source.txt C:\output.txt
HelloWorld.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:text name="pagina_inicio.holaMundo" />
Para poner un textfield con label:
<s:textfield key="login.username" name="username" />
Internacionalización – varios idiomas
Podemos permitir al usuario cambiar el idioma dinámicamente con enlaces que envíen el parámetro request_locale
. Por ejemplo:
HelloWorld.jsp
<a href="location.action?request_locale=es">En Español</a>
<a href="location.action?request_locale=pt">En Portugués</a></p>
-src - global.properties - global_pt.properties - global_es.properties
La clase vinculada a location.action no hace nada en particular:
<action name="location">
<result>HelloWorld.jsp</result>
</action>
Basta con el el parámetro enviado sea request_locale para que se produzca correctamente el cambio del idioma.
Si queremos cargar el español, y el español es el idioma por defecto, dejaremos en blanco el fichero global_es.properties, de tal forma que al no encontrar nada, el sistema se irá a leer el fichero de configuración por defecto, que estará en español.
Imprimiendo valores dentro de un atributo. Hay dos formas
Struts 2 nos permite cargar textos internacionalizados en atributos de etiquetas mediante la etiqueta <s:text>
.
HelloWorld.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<h2>
<s:property value="%{getText('resource.msg')}" />
<s:property value="mensaje" />
</h2>
Cuando queramos usar internacionalización en el atributo de una etiqueta, utilizaremos esta forma de cargar los textos.
global.properties
resource.msg = Seleccione una opción, por favor
HellowWorld.java
public class HelloWorld extends ActionSupport {
private String mensaje;
public String recuperaMensaje(){
setMensaje(getText("resource.msg"));
/*nota:
Es posible recuperar el idioma actual usando:
Locale loc = getLocale(); */
return SUCCESS;
}
public String getMensaje() {
return mensaje;
}
public void setMensaje(String mensaje) {
this.mensaje = mensaje;
}
}
Nota!
Obtener el nombre del action que se está ejecutando:
String action = com.opensymphony.xwork2.ActionContext.getContext().getName();
System.out.println(action);