JSF: проблема ресурсного пакета с интернационализацией - PullRequest
1 голос
/ 13 января 2011

Я реализовал интернационализацию, как в этом учебнике!

Когда я меняю язык в своем приложении. Оно работает. Но только до следующего запроса. Тогда настройки языка будут сброшены на мой стандартный язык -.-

Что мне здесь не хватает:

LanguageBean.java

@ManagedBean(name="language")
@SessionScoped
public class LanguageBean implements Serializable{

    private static final long serialVersionUID = 1L;

    private String localeCode;

    private static Map<String,Object> countries;
    static{
        countries = new LinkedHashMap<String,Object>();
        countries.put("Deutsch", Locale.GERMAN); //label, value
        countries.put("English", Locale.ENGLISH); 

    }

    public Map<String, Object> getCountriesInMap() {
        return countries;
    }

    public String getLocaleCode() {
        return localeCode;
    }


    public void setLocaleCode(String localeCode) {
        this.localeCode = localeCode;
    }

    //value change event listener
    public void countryLocaleCodeChanged(ValueChangeEvent e){

        String newLocaleValue = e.getNewValue().toString();

               //loop country map to compare the locale code
               for (Map.Entry<String, Object> entry : countries.entrySet()) {

               if(entry.getValue().toString().equals(newLocaleValue)){

                FacesContext.getCurrentInstance()
                    .getViewRoot().setLocale((Locale)entry.getValue());

              }
        }
    }

}

my facelets template:

                <h:selectOneMenu value="#{language.localeCode}" onchange="submit()"
            valueChangeListener="#{language.countryLocaleCodeChanged}">
            <f:selectItems value="#{language.countriesInMap}" />
        </h:selectOneMenu>

faces-config:

<application>
           <locale-config>
                <default-locale>de</default-locale>
           </locale-config>
       <resource-bundle>
        <base-name>org.dhbw.stg.wwi2008c.mopro.ui.text</base-name>
        <var>msg</var>
       </resource-bundle>
     </application>

1 Ответ

4 голосов
/ 13 января 2011

Добавьте следующую строку в setLocaleCode().

FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(localeCode));

См. Также этот урок , который я написал.

...