Curso de Struts 2 | Internacionalización

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Hola Mundo con internacionalización

struts.xml<constant name="struts.custom.i18n.resources" value="global" />
global.properties (en la raíz de la carpeta src)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

-src
	- global.properties
	- global_pt.properties
	- global_es.properties
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>

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.

Internacionalización imprimiendo valores dentro de un atributo. Hay dos formas

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);

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.