Foro sobre Java EE > Jsf internacionalización
Hola
Para hacer que se mantenga el idioma seleccionado por el usuario lo que tienes que hacer es "decirle" a JSF que el idioma es el siguiente:
xhtml
<h:commandLink title="#{messages['english']}" action="#{sessionController.changeLanguage('en')}">
<p:graphicImage url="/resources/images/uk.gif" />
</h:commandLink>
<h:commandLink title="#{messages['spanish']}" action="#{sessionController.changeLanguage('es')}">
<p:graphicImage url="/resources/images/spanish.jpg" />
</h:commandLink>
Luego el Controller de ambito de 'session' con el siguiente código:
@ManagedBean(name="sessionController")
@SessionScoped
public class SessionController implements Serializable {
private static final long serialVersionUID = 1L;
private Locale locale;
public SessionController(){
locale = new Locale("es");
}
public Locale getLocale() {
return locale;
}
public String changeLanguage(String language){
FacesContext context = FacesContext.getCurrentInstance();
setLocale(new Locale(language));
context.getViewRoot().setLocale(getLocale());
return null;
}
}
Saludos
Mucho cuidado con cambiar el locale por programación porque puedes cambiar el de la JVM y modificar el de todos los usuarios a la vez.
http://docs.oracle.com/javase/tutorial/i18n/locale/scope.html
Supongo que en tu programa tendrás que guardar en algún sitio el locale seleccionado por el usuario y usar ese locale a la hora de mostrar tus mensajes.
Por ejemplo para JSTL
http://viralpatel.net/blogs/update-jstl-locale/
Espero que te ayude.
En otra parte de la aplicación al usar
FacesContext.getCurrentInstance().getViewRoot().getLocale()
siempre me devuelve null
¿Porque puede ser?
¿Porque no está inicializado? inicializalo en algún punto.
Hola.
tengo un menu con los idiomas disponibles para mi aplicación. Si selecciono uno de ellos, traduzco la página actual pero si pulso en un enlace voy a otra pantalla en donde se carga el idioma por defecto.
¿Como puedo hacer para que e mantenga el idioma que selecciona el usuario?
Gracias