2011-01-13 88 views
1

我實施了像that教程中的國際化!JSF:Resourcebundle國際化問題

當我在我的應用程序中更改語言。有用。但直到下一個請求發生。然後,語言設置被重置爲我的標準語言-.-

缺少什麼我在這裏:

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> 

回答

4

將以下行添加到setLocaleCode()

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

另請參閱我寫的this tutorial

+0

你的教程非常好,容易實現,但它不適用於我:-(我做的和你在教程中完全一樣,無法向我自己解釋 – Sven 2011-01-13 14:11:38