Динамическое переключение локали в приложении JSF? - PullRequest
4 голосов
/ 05 октября 2010

У меня есть приложение, в котором пользователь может динамически переключаться между локалями со страницы приветствия моего приложения. Я вижу, что более ранний разработчик (унаследовавший код без большого количества документации) переопределил следующие три метода из ViewHandler и сказал мне, что это требуется для динамического переключения Locale ... любая помощь высоко ценится

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

public Locale calculateLocale(FacesContext facescontext)
{
    Locale userLocale = LocaleManager.getInstance().getCurrentLocale();
    if (userLocale != null)
    {
        return userLocale;
    }
    else
    {
        return delegate.calculateLocale(facescontext);
    }
}

public void renderView(FacesContext facescontext, UIViewRoot uiviewroot)
        throws IOException, FacesException {
    uiviewroot.setLocale(LocaleManager.getInstance().getCurrentLocale());
    delegate.renderView(facescontext, uiviewroot);
}
public UIViewRoot createView(FacesContext facescontext, String s)
{
    UIViewRoot view = delegate.createView(facescontext, s);
    view.setLocale(LocaleManager.getInstance().getCurrentLocale());
    return view;
}

1 Ответ

9 голосов
/ 05 октября 2010

Мое решение:

  • имеет управляемый bean-объект в рамках сеанса, который содержит Locale экземпляр
  • имеет следующую кнопку (или ссылку) для каждого поддерживаемого языка:

    <h:commandButton action="#{localeBean.changeLocal}">
         <f:setPropertyActionListener target="#{localeBean.selectedLanguage}" 
                  value="en" />
    </h:commandButton>
    
  • установить текущую локаль на основе переданного языка (new Locale(lang))

  • в вашем шаблоне (ах) используйте <f:view locale="#{localeBean.currentLocale}">
...