Vous avez besoin de stocker les paramètres régionaux sélectionnés dans l'étendue de session et de le fixer dans le viewroot à deux endroits: une fois par UIViewRoot#setLocale()
immédiatement après avoir modifié les paramètres régionaux (qui modifie les paramètres régionaux de l'actuel viewroot et se reflète dans la publication; cette partie n'est pas nécessaire lorsque vous effectuez une redirection par la suite) et une fois dans l' locale
attribut de l' <f:view>
(ce qui définit/conserve les paramètres régionaux dans la suite des requêtes/vues).
Voici un exemple de comment un tel LocaleBean
devrait ressembler à:
package com.example.faces;
import java.util.Locale;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class LocaleBean {
private Locale locale;
@PostConstruct
public void init() {
locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
}
public Locale getLocale() {
return locale;
}
public String getLanguage() {
return locale.getLanguage();
}
public void setLanguage(String language) {
locale = new Locale(language);
FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}
}
Et voici un exemple de la vue devrait ressembler à:
<!DOCTYPE html>
<html lang="#{localeBean.language}"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<f:view locale="#{localeBean.locale}">
<h:head>
<title>JSF/Facelets i18n example</title>
</h:head>
<h:body>
<h:form>
<h:selectOneMenu value="#{localeBean.language}" onchange="submit()">
<f:selectItem itemValue="en" itemLabel="English" />
<f:selectItem itemValue="nl" itemLabel="Nederlands" />
<f:selectItem itemValue="es" itemLabel="Español" />
</h:selectOneMenu>
</h:form>
<p><h:outputText value="#{text['some.text']}" /></p>
</h:body>
</f:view>
</html>
Notez que <html lang>
n'est pas nécessaire pour le fonctionnement de l'ACI, mais il est obligatoire comment les moteurs de recherche interprètent votre page. Sinon, il serait peut-être marqué comme un contenu en double ce qui est mauvais pour le RÉFÉRENCEMENT.
Connexes: