Как определить локаль для приложения на основе первоначального запроса браузера и использовать его на протяжении всего сеанса просмотра до тех пор, пока пользователь не изменяет локаль и как вы заставляете эту новую локаль через оставшийся сеанс?
JSF 2.0 устанавливает локаль на протяжении всего сеанса из браузера и программно
Ответ 1
Создайте управляемый сеансом bean, как показано ниже:
@ManagedBean
@SessionScoped
public class LocaleManager {
private Locale locale;
@PostConstruct
public void init() {
locale = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
}
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);
}
}
Чтобы установить текущую локаль представлений, привяжите ее к <f:view>
вашего основного шаблона.
<f:view locale="#{localeManager.locale}">
Чтобы изменить его, привяжите его к <h:selectOneMenu>
с языковыми настройками.
<h:form>
<h:selectOneMenu value="#{localeManager.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>
Чтобы улучшить SEO ваших интернационализированных страниц (в противном случае это будет отмечено как дублирующийся контент), свяжите язык с <html>
.
<html lang="#{localeManager.language}">