0

私のプロジェクトではproperties files、国際化に使用される2つがあります。パラメータとともに使用ResourceBundleLocale、プロパティファイルのキーをコレクションに保存します。残念ながら、コレクションには両方のファイルの結合されたキーが保存されています。ロケールに応じて、単一のファイルからキーが必要です。私の場合、ロケールは「bg_BG」です。プロパティファイルは次のとおりです。

time_intervals.properties

ここに画像の説明を入力してください

time_intervals_bg.properties

ここに画像の説明を入力してください

そして、これは私がそれらを読んでいる方法です:

public List<SelectItem> getTimeSpentList() {
        
        timeSpentList = new ArrayList<SelectItem>();
        
        FacesContext context = FacesContext.getCurrentInstance();

        ResourceBundle bundle = ResourceBundle.getBundle("properties.time_intervals", context.getViewRoot().getLocale());
        
        Enumeration<String> time_interval_keys = bundle.getKeys();
        
        List<String> sortedKeys = new ArrayList<String>();

        while(time_interval_keys.hasMoreElements()) {
            String key = time_interval_keys.nextElement();
            sortedKeys.add(key);
        }
        
        Collections.sort(sortedKeys, new Comparator<String>() {
            
            @Override
            public int compare(String o1, String o2) {
                if (o1.charAt(1) != ' ') {
                    return -1;
                } else if (o2.charAt(1) != ' ') {
                    return 1;
                }
                
                return o1.compareTo(o2); 
            }
        });
        for (String key : sortedKeys) {
            timeSpentList.add(new SelectItem(key));
        }
        
        if (timeSpentList == null || timeSpentList.isEmpty()) {
            timeSpentList.add(new SelectItem(""));
            return timeSpentList;
        }
        return timeSpentList;
    }

ここでの問題は、Enumeration<String> time_interval_keys呼び出した後に両方のプロパティファイルから結合されたキーを取得するbundle.getKeys()が、そのうちの1つからの値のみが必要なことです。助けてください。

PS私の説明とコードについて不明な点があれば教えてください。

4

2 に答える 2

1

ResourceBundle システムを適切に使用していません。

各プロパティ ファイルには、同じキー (より正確には、基本プロパティ ファイルで宣言されたキーのサブセット) が含まれている必要があります。キーの値を要求すると (またはキーと値をリストするとき)、ResourceBundle は最も正確なプロパティ ファイルでキーを見つけようとし、デフォルトのプロパティ ファイルがデフォルトになります。

プロパティ ファイル内のキーが異なる場合、これらのキーは別個のものと見なされます。

于 2011-11-03T17:12:04.417 に答える
0

前までに回答を拡張するには、ローカライズされた文字列用のリソース ファイルのグループを 1 つと、数値用の個別のファイルを 1 つ用意する必要があります。

time_intervals.properties:
    one_hour=1 hour

time_intervals_bg.properties:
    one_hour=1 час

time_intervals.numbers.properties:
    one_hour=1

から表示する文字列を読み込み、time_intervals対応する数値をから読み込みますtime_intervals.numbers

編集:または、数値を使用して表示する文字列を決定しようとしている場合は、ファイル内のキーと値を切り替えて、ファイルを忘れてくださいtime_intervals.numbers:

time_intervals.properties:
    1=1 hour

time_intervals_bg.properties:
    1=1 час
于 2011-11-03T17:19:14.647 に答える