2

新手:帮助使用 JSF 切换语言环境

嗨,我希望有人能提供帮助,我在语言环境之间切换时遇到问题,特别是我的网站的 en_GB 到 en_US 和 en_US 到 en_GB,但是所有其他两个字符的语言环境都可以正常切换。

faces_config.xml 片段

<default-locale>en_gb</default-locale>
<supported-locale>en_us</supported-locale>
<supported-locale>en_gb</supported-locale>
<supported-locale>cy</supported-locale>
<supported-locale>es</supported-locale>
<supported-locale>fr</supported-locale>

网页片段

  <f:view locale="#{localeBean.locale}">
     <h:body>
       <h:form>
         <h:selectOneMenu value="#{localeBean.language}" onchange="submit()">
           <f:selectItem itemValue="en_GB" itemLabel="English (British)" />
           <f:selectItem itemValue="en_US" itemLabel="English (American)" />
           <f:selectItem itemValue="cy" itemLabel="Cymraeg (British)" />
           <f:selectItem itemValue="es" itemLabel="Español (España)" />
           <f:selectItem itemValue="fr" itemLabel="Français (France)" />
         </h:selectOneMenu>
      </h:form>
    </h:body
  </f:view>

爪哇豆

公共类 LocaleBean {

private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();

public Locale getLocale() {
    return locale;
}

public String getLanguage() {
    return locale.getLanguage();
}

public void setLanguage(String language) {

    if ( language.equals("en_GB") ) {
        locale = new Locale("en","GB");
    }
    else if ( language.equals("en_US") ) {
        locale = new Locale("en","US");
    }
    else {
        locale = new Locale(language);
    }

 FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}

}

我的问题是,当我将语言环境更改为 en_US 或 en_GB 时,selectItem 默认为 en_GB itemLabel,所以除非我先选择 fr、es 或 cy,否则我无法选择 en_US 或 en_GB 语言环境。

任何帮助表示赞赏

4

1 回答 1

0

发生的原因应该很明显:

public String getLanguage() {
    return locale.getLanguage();
}

这将始终只返回语言代码。但是你的英文标识符分别是“en_GB”和“en_US”,所以它总是选择第一个项目。

我现在相信,修复很明显,不是吗?我推荐的修改是:

public String getLanguage() {
    return locale.toString();
}

也就是说,除非您只在其他地方使用语言代码......

于 2011-06-09T10:58:18.823 回答