Me deem uma luz por favor !!!
Pessoal, tem 4 dias que eu to apanhando igual vaca na horta pra Internacionalizacao no spring. Minha aplicacao consiste em o usuario selecionar a linguagem que ele deseja no seu portal ( pt_BR, en_US … etc ) e com isso fazer com que o spring coloque esse Locale na sessao. Acredito que esse seja um problema comum, mas pesquisei e ja tentei de tudo e nao entendo pq a porcaria do locale nao fica na sessao. Consegui fazer ele funcionar somente a nivel de request. Quando eu volto pra primeira página ele volta com o locale padrao… alguem sabe me dizer pq ??
aqui vao alguns dos trechos de código q estou utilizando:
Uso struts 2, spring 2.5 e maven 2.2.1
Struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.devMode" value="true" />
<package name="locale" extends="struts-default">
<action name="initPortal" method="init" class="localeAction">
<result name="input">pages/mainPage.jsp</result>
<result name="success">pages/mainPage.jsp</result>
</action>
<action name="changelocale-submit" method="changeLocale" class="localeAction">
<result name="input">pages/secondPage.jsp</result>
<result name="success">pages/secondPage.jsp</result>
</action>
</package>
</struts>
Disponibilizo uma lista na mainPage pro cara dar um submit passando um string locale ( trecho ).
mainPage.jsp:
<%@ taglib prefix="s" uri="/struts-tags"%>
...
<br><s:i18n name="messages"><s:text name="site.title" /></s:i18n>
Escolha o locale:
...
<s:form action="changelocale-submit" >
...
<s:select list="locales" name="currentLocale" />
...
<s:submit></s:submit>
...
</s:form>
Trecho do meu applicationContext.xml
...
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages">
</property>
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<!-- Declare the Interceptor -->
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="currentLocale" />
</bean>
<!-- Declare the Resolver -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver "/>
...
Action ( trecho )
...
public class LocaleAction extends ActionSupport implements Preparable, SessionAware{
public String currentLocale;
public Map locales = null;
public Locale locale = null;
public String init() throws Exception {
System.out.println("This is the locale injected by spring: "+currentLocale);
return Action.SUCCESS;
}
public String changeLocale(){
System.out.println("received locale: "+currentLocale);
locale = new Locale(currentLocale);
return Action.SUCCESS;
}
public void prepare() throws Exception {
if (locales == null) {
HashMap<String, String> localeMap = new HashMap<String, String>();
localeMap.put("EN", "English - US");
localeMap.put("BR", "Português - BR");
localeMap.put("ES", "Espanõl - ES");
locales = localeMap;
}
}
getters and setters...
}
Entao é simples. mainPage : submit -> secondPage ( ok ) Internacionalizado. Quando volto pra mainPage atraves do link na secondPage, a internacionalizacao se perde. Como coloco esse locale na sessao ???
secondPage:
<%@ taglib prefix="s" uri="/struts-tags"%>
<br><s:i18n name="messages"><s:text name="site.language" /></s:i18n>
<BR>
<a href="http://localhost:8080/portalAluno-portal/initPortal.action">Link pra mainPage</a>