Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Jsf internacionalización

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

septiembre 23, 2014 | Unregistered CommenterJuan Fandiño

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

septiembre 24, 2014 | Registered Commenterxabe

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.

septiembre 24, 2014 | Registered Commenterantuansoft

En otra parte de la aplicación al usar
FacesContext.getCurrentInstance().getViewRoot().getLocale()

siempre me devuelve null
¿Porque puede ser?

octubre 20, 2014 | Unregistered CommenterJuan Fandiño

¿Porque no está inicializado? inicializalo en algún punto.

octubre 21, 2014 | Registered Commenterantuansoft