Po zdefiniowaniu language properties i zdefiniowaniu locale-config w faces-config, znalazłem taki kod do obsługi przełączania języków z poziomu aplikacji (ManagedBean dla języków):
import java.io.Serializable; import java.util.Locale; import java.util.logging.Logger; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; /** * Used for managing i18n in application for each user * @author Krzysztof Grajek * */ @ManagedBean @SessionScoped public class LanguageSwitcher implements Serializable { private static final long serialVersionUID = 2756934361134603857L; private static final Logger LOG = Logger.getLogger(LanguageSwitcher.class.getName()); private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale(); public Locale getLocale() { return locale; } public String getLanguage() { return locale.getLanguage(); } public void changeLanguage(String language) { locale = new Locale(language); FacesContext.getCurrentInstance().getViewRoot().setLocale(locale); } }
I fragmencik kodu do zmieniania języków z poziomu strony xhtmla:
<h3>Language switcher:</h3> <h:form id="langauge_form"> <h:commandLink action="#{languageSwitcher.changeLanguage('pl')}" value="Polski" /> | <h:commandLink action="#{languageSwitcher.changeLanguage('en')}" value="English" /> </h:form>
Jednak powyższy zestaw pozwala jedynie na zmianę języków na stronie xhtmla, na której aktualnie jesteśmy. Pytanie: jak sprawić, by raz wybrana zmiana zastosowała się do całej aplikacji/wszystkich podstron xhtmla?