2

フィンランド語のロケールが機能せず、残りは機能する理由を誰か教えてもらえますか?

private static Map<String,Object> countries;
    private static Locale finnishLocale = new Locale("fi", "FI");

static{
    countries = new LinkedHashMap<String,Object>();
    countries.put("English", Locale.ENGLISH); //label, value
    countries.put("French", Locale.FRENCH);
    countries.put("German", Locale.GERMAN);
    countries.put("Finnish", finnishLocale); <---------- Not working!
}

public void setLocaleCode(String localeCode) {


                this.localeCode = localeCode;
                updateLocale(localeCode);          


        }


public void updateLocale(String newLocale){

        String newLocaleValue = newLocale;

        //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());

              }
               }

        }

New-clause で作成したロケールが機能していないということです。そのように実装されたロケールは、Locale.GERMAN などと同様の Locale-object だと思ったので、うまく説明できませんか? 私のソフトウェアは、locale ja Faces コンテキストを更新する以外に何もしません。例外はありません。qがばかげている場合は申し訳ありません。ドイツ語、英語などを意味し、プログラムはロケールと Faces コンテキストを更新します。

質問に答えていただければ幸いです。私は迷っています(再び)Sami

4

2 に答える 2

6

あなたのupdateLocale()方法が原因のようです。と比較Locale#toString()していnewLocaleます。Locale定数には、国ではなく言語セットのみがすべて含まれています。Locale.ENGLISH.toString()たとえば、 return"en"new Locale("fi", "FI").toString()返します"fi_FI"newLocaleこれは、変数に"en""fr""de"およびが実際に含まれていることを意味するだけ"fi"です。最初の 3 つは定数と一致しますが、後者は とは一致しませfinnishLocaleん。toString()getLanguage()

問題を解決するには、次のいずれかを変更します

private static Locale finnishLocale = new Locale("fi", "FI");

private static Locale finnishLocale = new Locale("fi");

または、より良いのは、に変更Map<String, Object>してからMap<String, Locale>変更することです

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

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

全体として、このマップ ループはややぎこちないものです。newLocaleがサーバー側で制御された値である場合は、viewRoot.setLocale(new Locale(newLocale))代わりに実行してください。

于 2012-05-03T21:04:35.770 に答える
2

これが機能するため、別の場所でエラーが発生します。

public class Runner01 {
private static Map<String,Object> countries;
private static Locale finnishLocale = new Locale("fi", "FI");

static{
    countries = new LinkedHashMap<String,Object>();
    countries.put("English", Locale.ENGLISH); //label, value
    countries.put("French", Locale.FRENCH);
    countries.put("German", Locale.GERMAN);
    countries.put("Finnish", finnishLocale); 
}

public static void main(String[] args) {
    for( Map.Entry<String, Object> entry : countries.entrySet() ) {
        System.out.println(entry.getKey() + "=>" + entry.getValue().toString());
    }
}


}
于 2012-05-03T21:03:40.497 に答える