Подтвердить что ты не робот

JSF 2.0 устанавливает локаль на протяжении всего сеанса из браузера и программно

Как определить локаль для приложения на основе первоначального запроса браузера и использовать его на протяжении всего сеанса просмотра до тех пор, пока пользователь не изменяет локаль и как вы заставляете эту новую локаль через оставшийся сеанс?

4b9b3361

Ответ 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}">