Dynamic locale switching in a JSF app?

时间秒杀一切 提交于 2020-01-01 11:48:04

问题


I have an application where the user can dynamically switch between locales from the welcome page of my application. I see that the earlier developer (inherited the code without much documentation) has overridden the following three methods from ViewHandler and tells me that this is required for dynamic switching of the Locale...any help is highly appreciated

Also, do let me know if there is a better way of handling this

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:


My solution is:

  • have a session-scoped managed-bean that holds a Locale instance
  • have the the following button (or link) for each supported language:

    <h:commandButton action="#{localeBean.changeLocal}">
         <f:setPropertyActionListener target="#{localeBean.selectedLanguage}" 
                  value="en" />
    </h:commandButton>
    
  • set the current locale based on the passed language (new Locale(lang))

  • in your template(s) use <f:view locale="#{localeBean.currentLocale}">


来源:https://stackoverflow.com/questions/3858868/dynamic-locale-switching-in-a-jsf-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!