Bem, não sei se o tópico foi especifico, mais é o seguinte, já possuo minha internacionalização funcionando, e hoje para mudar a linguagem estou utilizando o seguinte:
<c:if test="${not empty param.lingua}">
<fmt:setLocale value="${param.lingua}" scope="session"/>
</c:if>
problema é que:
1 - está na view, eu nao gosto disso.
2 - não sei como delegar essa responsabilidade para uma classe com o vraptor
e queria saber se nessa mudança vai ficar aparecendo alguma coisa diferente na url do tipo ?lingua=en se sim, tem como remover?
por exemplo, quero que fique minhaUrl/home/index estando em pt_BR ou en_US
espero que eu tenha sido claro, obrigado.
bem pessoal, acabei criando um interceptor para fazer isso pra mim, mais nao está mudando. alguem tem alguma ideia do pq?
o idioma está chegando corretamente e tudo mais, mais nao modifica as keys, continuam iguais.
package br.com.rhunificado.interceptor;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.jstl.core.Config;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.core.Localization;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.resource.ResourceMethod;
@Intercepts
@RequestScoped
public class MudaIdioma implements Interceptor {
private final HttpServletRequest request;
private final Result result;
private final Localization loc;
public MudaIdioma(HttpServletRequest request, Result result, Localization loc) {
this.request = request;
this.result = result;
this.loc = loc;
}
@Override
public boolean accepts(ResourceMethod arg0) {
// TODO Auto-generated method stub
return true;
}
@Override
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
if(request.getParameter("idioma") != null) {
String language = request.getParameter("idioma");
//Locale locale = new Locale(language);
Config.set(request.getSession(), Config.FMT_LOCALE, language); //setei diretamente o language ao invez do locale e funcionou.
Config.set(request.getSession(), Config.FMT_FALLBACK_LOCALE, language);
}
System.out.println("Interceptando " + request.getRequestURI());
stack.next(method, resourceInstance);
}
}
bem pessoal, consegui.