новичок: помогите с использованием mod_rewrite для локализованного сайта - PullRequest
2 голосов
/ 09 июня 2011

Новичок: помогите переключить локаль с JSF

Привет, я надеюсь, что кто-то может помочь, у меня проблемы с переключением между локалями, в частности en_GB на en_US и en_US на en_GB для моего веб-сайта, однако все остальные два языковых языковых стандартапереключаются нормально.

фрагмент Face_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>

Java bean

открытый класс 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.

Любая помощь приветствуется

1 Ответ

0 голосов
/ 09 июня 2011

Причина, по которой это происходит, должна быть очевидна:

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

Это всегда будет возвращать только код языка.Но ваши английские идентификаторы - это «en_GB» и «en_US» соответственно, поэтому он всегда выбирает первый элемент.

Я считаю, что теперь это очевидно, не так ли?Я рекомендую модификацию:

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

То есть, если вы не используете только код языка где-то еще ...

...