2

4 つのプロパティ ファイルがあります

  1. アプリケーションのプロパティ
  2. Application_fr_FR.properties
  3. データベースのプロパティ
  4. Database_fr_FR.properties

そのため、複数のプログラムで国際化が必要になったため、複数のプロパティ ファイルをロードし、ロケールに固有のプロパティ ファイルから値のキーと値のペアを取得する必要があります。そのために私は ResourceBundleService.java を持っています

public class ResourceBundleService {
    private static String language;
    private static String country;
    private static Locale currentLocale;
    static ResourceBundle labels;
    static {
        labels = ResourceBundle
                .getBundle("uday.properties.Application");
        labels = append(Database.properties");
        //** how to append existing resource bundle with new properties file?
    }

    public static String getLabel(String resourceIndex, Locale locale) {
        return labels.getString(resourceIndex);
        //How to get locale specific messages??
    }
}

質問が明確であることを願っています。

4

3 に答える 3

5

ResourceBundle.getBundle(baseName, locale)で毎回呼び出す必要がありますgetLabel。ResourceBundle は内部キャッシュを維持するため、毎回すべての props ファイルをロードすることはありません。

public static String getLabel(String resourceIndex, Locale locale) {
    ResourceBundle b1 = ResourceBundle.getBundle("uday.properties.Application", locale);
    if (b1.contains(resourceIndex)) {
       return b1.getString(resourceIndex);
    }
    ResourceBundle b2 = ResourceBundle.getBundle("uday.properties.Database", locale);
    return b2.getString(resourceIndex);
}
于 2013-06-25T10:11:39.670 に答える
0

この実装をgithubで確認してみましょう。次の関数命名規則が必要です。

MultiplePropertiesResourceBundle は、複数のプロパティ ファイルから ResourceBundle を結合できるようにするための抽象基本実装ですが、これらのプロパティ ファイルは同じ名前 (これらの結合された ResourceBundle の基本名) で終わる必要があります。

最初に使用する場合は、次のように抽象クラスを実装する必要がありMultiplePropertiesResourceBundleます。

import ch.dueni.util.MultiplePropertiesResourceBundle;

public class CombinedResources extends MultiplePropertiesResourceBundle {

    public  CombinedResources() {
        super("package_with_bundles");
    }

}

次に、拡張する空のクラスを実装する必要がありますCombinedResources

public class CombinedResources_en extends CombinedResources {}

他の言語についても同様です。その後、以下のようにバンドルを使用できます。

ResourceBundle bundle = ResourceBundle.getBundle("CombinedResources");

このバンドルは、 内のすべてのプロパティ ファイルを使用しますpackage_with_bundles。詳細については、github リポジトリ内を参照してください。

于 2014-10-08T09:03:22.460 に答える