【问题标题】:Dynamic locale switching in a JSF app?JSF 应用程序中的动态语言环境切换?
【发布时间】:2010-10-04 20:29:22
【问题描述】:

我有一个应用程序,用户可以从我的应用程序的欢迎页面在区域设置之间动态切换。我看到早期的开发人员(在没有太多文档的情况下继承了代码)已经覆盖了 ViewHandler 的以下三个方法,并告诉我这是动态切换语言环境所必需的......非常感谢任何帮助

另外,如果有更好的处理方法,请告诉我

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;
}

【问题讨论】:

    标签: jsf internationalization locale


    【解决方案1】:

    我的解决办法是:

    • 拥有一个会话范围的托管 bean,其中包含一个 Locale 实例
    • 每种支持的语言都有以下按钮(或链接):

      <h:commandButton action="#{localeBean.changeLocal}">
           <f:setPropertyActionListener target="#{localeBean.selectedLanguage}" 
                    value="en" />
      </h:commandButton>
      
    • 根据传递的语言设置当前区域设置 (new Locale(lang))

    • 在您的模板中使用&lt;f:view locale="#{localeBean.currentLocale}"&gt;

    【讨论】:

    • 感谢您的建议。我被告知(在发布问题后)如果已经创建了 jsf 视图,即使语言环境已更改,恢复视图也会在它之前创建的相同语言环境中呈现 CURRENT 视图......你的建议能处理吗?
    • Restore-view 是 jsf 生命周期中的一个阶段,因此在每个请求上都会被调用。因此,您发出的下一个请求(例如,在重定向之后),您将拥有新的语言环境。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多