2

初心者: JSF でロケールを切り替えるのを手伝ってください

こんにちは、誰かが助けてくれることを願っています。特に、Web サイトのロケールを en_GB から en_US に、en_US から en_GB に切り替える際に問題が発生していますが、他の 2 つの文字ロケールはすべて正常に切り替えられています。

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>

ジャワビーン

public class 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 itemLablel になるため、最初に 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 に答える