【问题标题】:JSF 2.0 set locale throughout session from browser and programmatically [duplicate]JSF 2.0 在整个会话中从浏览器和以编程方式设置区域设置 [重复]
【发布时间】:2011-07-20 07:03:00
【问题描述】:

如何根据初始浏览器请求检测应用程序的区域设置,并在整个浏览会话期间使用它,直到用户专门更改区​​域设置,以及如何在剩余会话中强制使用此新区域设置?

【问题讨论】:

    标签: java jsf jsf-2 internationalization locale


    【解决方案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}">
    

    要更改它,请将其绑定到带有语言选项的 &lt;h:selectOneMenu&gt;

    <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(否则会被标记为重复内容),请将语言绑定到 &lt;html&gt;

    <html lang="#{localeManager.language}">
    

    【讨论】:

    • 如果我添加了不在 Locale 类定义中的 add tr,例如 Locale.CANADA,Locale.GERMAN。我在 faces-config.xml 中添加了; entr 但是它不起作用:/
    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多