モジュール java.base
パッケージ java.util

クラスResourceBundle

  • 直系の既知のサブクラス:
    ListResourceBundle, PropertyResourceBundle

    public abstract class ResourceBundle
    extends Object
    リソース・バンドルには、ロケール固有のオブジェクトが含まれます。 プログラムでStringなどのロケール固有のリソースが必要なときは、現在のユーザーのロケールに合ったリソース・バンドルからロードできます。 このように、リソース・バンドルから、ロケール固有の情報のすべてでなくてもその大部分を切り離すことで、ユーザーのロケールにはほとんど依存しないプログラム・コードを書くことができます。

    これにより、以下の特徴を持つプログラムを書くことが可能になります。

    • 異なる言語への地域対応、または翻訳が容易
    • 複数のロケールを同時に処理可能
    • 将来サポートするロケールを追加する際の修正が容易

    リソース・バンドルはファミリに属しています。そのファミリでは、メンバーは共通の基底名を共有していますが、ファミリ名にはロケールを識別する追加コンポーネントも含まれています。 たとえば、リソース・バンドルのファミリの基底名は「MyResources」です。 ファミリは、ファミリと同じ名前(MyResources)で、特定のロケールがサポートされない場合は、最後の手段のバンドルとして使用される、デフォルトのリソース・バントルを持つ必要があります。 また、ファミリは、必要なだけの数のロケール固有のメンバーを提供することができます。たとえば、「MyResources_de」と名付けられたドイツのメンバーなどです。

    ファミリの各リソース・バンドルには同じ項目がありますが、こうした項目は当該リソース・バンドルにより表されるロケールに合わせて翻訳されています。 たとえば、「MyResources」と「MyResources_de」の両方に、操作を取り消すためのボタンで使用されるStringがあるとします。 そのStringに、「MyResources」では「Cancel」を格納し、「MyResources_de」では「Abbrechen」を格納することができます。

    同じ言語を使用するロケールでも国によってリソースが異なるときは、特殊化が可能です。たとえば、「MyResources_de_CH」には、スイス(CH)系のドイツ語(de)のオブジェクトが含まれています。 リソースの一部だけを修正することもできます。

    プログラムでロケール固有のオブジェクトが必要なときは、getBundleメソッドを使用してResourceBundleクラスをロードします。

     ResourceBundle myResources =
          ResourceBundle.getBundle("MyResources", currentLocale);
     

    リソース・バンドルは、キーと値のペアになっています。 キーは、バンドルのロケール固有のオブジェクトを一意に識別します。 キーと値の2つのペアが含まれているListResourceBundleの例を示します。

     public class MyResources extends ListResourceBundle {
         protected Object[][] getContents() {
             return new Object[][] {
                 // LOCALIZE THE SECOND STRING OF EACH ARRAY (e.g., "OK")
                 {"OkKey", "OK"},
                 {"CancelKey", "Cancel"},
                 // END OF MATERIAL TO LOCALIZE
            };
         }
     }
     
    キーは常にStringです。 この例では、キーは「OkKey」と「CancelKey」です。 前述した例では、値「OK」と「Cancel」もStringですが、必ずしもそうである必要はありません。 値は、どの型のオブジェクトでも可能です。

    リソース・バンドルから適切なgetterメソッドを使用してオブジェクトを検索します。 「OkKey」と「CancelKey」はどちらも文字列なので、取得にはgetStringを使用します。

     button1 = new Button(myResources.getString("OkKey"));
     button2 = new Button(myResources.getString("CancelKey"));
     
    getterメソッドは、すべて引数としてキーを要求し、検出したオブジェクトを返します。 オブジェクトが見つからない場合、getterメソッドはMissingResourceExceptionをスローします。

    getString以外に、ResourceBundleでは、文字列配列を取得するgetStringArrayメソッドも提供します。同様に、ほかの型のオブジェクトを取得するジェネリックgetObjectメソッドも提供します。 getObjectを使用する場合、結果を適切な型にキャストする必要があります。 たとえば、

     int[] myIntegers = (int[]) myResources.getObject("intList");
     

    Javaプラットフォームでは、ResourceBundleの2つのサブクラスListResourceBundleおよびPropertyResourceBundleが用意されています。これらはリソースを作成するかなり簡単な方法を提供します。 前の例で簡単に示したように、ListResourceBundleはそのリソースをキー/値ペアのリストとして管理します。 PropertyResourceBundleはプロパティ・ファイルを使用してそのリソースを管理します。

    ListResourceBundleまたはPropertyResourceBundleでは不十分なときは、独自のResourceBundleサブクラスを書くことができます。 サブクラスでオーバーライドしなければいけないメソッドは2つあります。handleGetObjectおよびgetKeys()

    ResourceBundleサブクラスの実装は、複数のスレッドで同時に使用される場合はスレッドセーフである必要があります。 このクラスの非抽象メソッドのデフォルト実装と、直系の既知の具象サブクラスListResourceBundleおよびPropertyResourceBundleのメソッドはスレッドセーフです。

    リソース・バンドルと名前付きモジュール

    リソース・バンドルは、次の方法でモジュールにデプロイできます:

    リソース・バンドルとアプリケーション

    リソース・バンドルは、同じモジュールのアプリケーションと一緒にデプロイすることができます。 この場合、リソース・バンドルは、getBundle(String)またはgetBundle(String, Locale)メソッドを呼び出すことによって、モジュール内のコードによってロードされます。

    サービス・プロバイダとしてのリソース・バンドル

    リソース・バンドルは、1つ以上の「サービス・プロバイダ・モジュール」にデプロイすることができ、ServiceLoaderを使用して見つけることができます。 serviceインタフェースまたはクラスを定義する必要があります。 呼び出し元モジュールはサービスを使用することを宣言し、サービス・プロバイダ・モジュールはサービスの実装を提供することを宣言します。 リソース・バンドル・サービスの開発とリソース・バンドル・プロバイダのデプロイについては、ResourceBundleProviderを参照してください。 リソース・バンドルを取得するモジュールは、リソース・バンドル・プロバイダそのものでもかまいません。その場合、このモジュールは、サービス・プロバイダ機構を介してリソース・バンドルの位置を特定するだけです。

    「リソース・バンドル・プロバイダ」は、ResourceBundle.Controlの必要性を置き換えるようなXML形式のリソース・バンドルを提供できます。

    他のモジュールとクラスパス内のリソース・バンドル

    名前付きモジュールのリソース・バンドルはencapsulatedなので、他のモジュールのコードでは見つけることができません。 名前のないモジュールとクラスパスのリソース・バンドルは、アクセスするすべてのモジュールに対してオープンされています。 リソース・バンドルは、Module.getResourceAsStream(String)で指定されたリソース・カプセル化ルールに従います。

    Controlパラメータを持たないgetBundleファクトリ・メソッドは、「サービス・プロバイダ」からリソース・バンドルを見つけてロードします。 Module.getResourceAsStream(String)を呼び出して指定されたモジュールから名前付きリソースを探し、ClassLoader.getResourceAsStream(String)を呼び出すのと同じように検索を続けることができます。詳細については、getBundleメソッドの仕様を参照してください。 "java.class"または"java.properties"形式のカプセル化されていないリソース・バンドルのみが検索されます。

    呼び出し側モジュールが「リソース・バンドル・プロバイダ」の場合、クラス・ローダーの検索には戻りません。

    自動モジュール内のリソース・バンドル

    リソース・バンドルの一般的な形式は.propertiesファイル形式です。 通常、.propertiesリソース・バンドルはJARファイルにパッケージ化されています。 リソース・バンドルのみのJARファイルは、「自動モジュール」としてすぐにデプロイできます。 たとえば、JARファイルにエントリ"p/q/Foo_ja.properties"および.classエントリが含まれていて、解決されて自動モジュールとして定義されている場合、このモジュール用のパッケージは派生しません。 これにより、.properties形式のリソース・バンドルが、1つ以上のJARファイルにパッケージ化されます。このバンドルは、同じディレクトリにエントリを含み、自動モジュールとして正常に解決できます。

    ResourceBundle.Control

    ResourceBundle.Controlクラスは、ResourceBundle.Controlインスタンスを取るgetBundleファクトリ・メソッドがバンドル・ロード処理を実行する際に必要とする情報を提供します。 ユーザー独自のサブクラスを実装すれば、標準以外のリソース・バンドル形式を利用できるようにしたり、検索手順を変更したり、キャッシュ・パラメータを定義したりできます。 詳細については、そのクラスとgetBundleファクトリ・メソッドの説明を参照してください。

    ResourceBundle.Controlは、名前のないモジュールにデプロイされたアプリケーション用に設計されています。たとえば、非標準形式のリソース・バンドルをサポートしたり、非伝統的な規則でローカライズされたリソースをパッケージ化することができます。 ResourceBundleProviderは、モジュールに移行するときのResourceBundle.Controlの代わりです。 ResourceBundle.Controlパラメータを受け取るファクトリ・メソッドが呼び出されると、UnsupportedOperationExceptionがスローされます。

    ResourceBundle.Controlインスタンスを使用しないgetBundleファクトリ用」メソッドは、「デフォルト動作」リソース・バンドルのロードをカスタムResourceBundleControlProvider実装で変更できます。 指定されたベース名のResourceBundle.Controlをいずれかのプロバイダが提供する場合、そのResourceBundle.ControlはデフォルトResourceBundle.Controlのかわりに使用されます。 同じベース名をサポートする複数のサービス・プロバイダがある場合、ServiceLoaderから返された最初のサービス・プロバイダが使用されます。 カスタムのResourceBundle.Control実装は、名前付きモジュールでは無視されます。

    キャッシュ管理

    getBundleファクトリ・メソッドによって作成されたリソース・バンドル・インスタンスはデフォルトでキャッシュされ、ファクトリ・メソッドは同じリソース・バンドル・インスタンス(キャッシュされている場合)を複数回返します。getBundleクライアントは、キャッシュをクリアしたり、有効期間値を使ってキャッシュされたリソース・バンドル・インスタンスの寿命を管理したり、リソース・バンドル・インスタンスをキャッシュしないことを指定したりできます。 詳細については、getBundleファクトリ・メソッド」clearCacheResourceBundle.Control.getTimeToLive、およびResourceBundle.Control.needsReloadの説明を参照してください。

    次にあるのはResourceBundleのサブクラスMyResourcesの非常に簡単な例です。このサブクラスは2つのリソースを管理します(サブクラスが多数のリソースを管理する場合は、Mapを使用する)。 「親レベル」のResourceBundleが、(下記のokKeyのように)同じ値を持つ同じキーを扱う場合は、値を提供する必要はありません。
     // default (English language, United States)
     public class MyResources extends ResourceBundle {
         public Object handleGetObject(String key) {
             if (key.equals("okKey")) return "Ok";
             if (key.equals("cancelKey")) return "Cancel";
             return null;
         }
    
         public Enumeration<String> getKeys() {
             return Collections.enumeration(keySet());
         }
    
         // Overrides handleKeySet() so that the getKeys() implementation
         // can rely on the keySet() value.
         protected Set<String> handleKeySet() {
             return new HashSet<String>(Arrays.asList("okKey", "cancelKey"));
         }
     }
    
     // German language
     public class MyResources_de extends MyResources {
         public Object handleGetObject(String key) {
             // don't need okKey, since parent level handles it.
             if (key.equals("cancelKey")) return "Abbrechen";
             return null;
         }
    
         protected Set<String> handleKeySet() {
             return new HashSet<String>(Arrays.asList("cancelKey"));
         }
     }
     
    ResourceBundleの単一のファミリだけを使用する必要はありません。 たとえば、例外メッセージExceptionResources (ExceptionResources_frExceptionResources_deなど)で1つ、ウィジェットWidgetResource (WidgetResources_frWidgetResources_deなど)で1つというように、好きなようにリソースを分割してバンドルのセットを持つこともできます。
    導入されたバージョン:
    1.1
    関連項目:
    ListResourceBundle, PropertyResourceBundle, MissingResourceException, ResourceBundleProvider
    • ネストされたクラスのサマリー

      ネストされたクラス 
      修飾子と型 クラス 説明
      static class  ResourceBundle.Control
      ResourceBundle.Controlは、バンドル・ロード処理中にResourceBundle.getBundleファクトリによって呼び出される一連のコールバック・メソッドを定義します。
    • フィールドのサマリー

      フィールド 
      修飾子と型 フィールド 説明
      protected ResourceBundle parent
      このバンドルの親バンドル。
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      ResourceBundle()
      唯一のコンストラクタです。
    • メソッドのサマリー

      すべてのメソッド staticメソッド インスタンス・メソッド 抽象メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      static void clearCache()
      呼び出し元モジュールによってロードされたすべてのリソース・バンドルをキャッシュから削除します。
      static void clearCache​(ClassLoader loader)
      指定されたクラス・ローダーによってロードされたすべてのリソース・バンドルをキャッシュから削除します。
      boolean containsKey​(String key)
      指定されたkeyがこのResourceBundleまたはその親バンドル内に含まれるかどうかを判定します。
      String getBaseBundleName()
      既知の場合はこのバンドルのベース名を返します。不明の場合はnullを返します。
      static ResourceBundle getBundle​(String baseName)
      指定したベース名、デフォルト・ロケール、および呼び出し元モジュールを使用してリソース・バンドルを取得します。
      static ResourceBundle getBundle​(String baseName, Module module)
      指定されたモジュールに代わって、指定したベース名とデフォルトのロケールを使用してリソース・バンドルを取得します。
      static ResourceBundle getBundle​(String baseName, Locale locale)
      指定したベース名とロケール、および呼び出し元モジュールを使用してリソース・バンドルを取得します。
      static ResourceBundle getBundle​(String baseName, Locale locale, ClassLoader loader)
      指定された基底名、ロケール、クラス・ローダーを使用して、リソース・バンドルを取得します。
      static ResourceBundle getBundle​(String baseName, Locale targetLocale, ClassLoader loader, ResourceBundle.Control control)
      指定された基底名、ターゲット・ロケール、クラス・ローダー、およびコントロールを使用して、リソース・バンドルを返します。
      static ResourceBundle getBundle​(String baseName, Locale targetLocale, Module module)
      指定されたモジュールに代わって、指定されたベース名とロケールを使用してリソース・バンドルを取得します。
      static ResourceBundle getBundle​(String baseName, Locale targetLocale, ResourceBundle.Control control)
      指定された基底名、ターゲット・ロケール、コントロール、および呼出し側のクラス・ローダーを使用して、リソース・バンドルを返します。
      static ResourceBundle getBundle​(String baseName, ResourceBundle.Control control)
      指定された基底名、デフォルトのロケール、および指定されたコントロールに基づいて、リソース・バンドルを返します。
      abstract Enumeration<String> getKeys()
      キーのリストを返します。
      Locale getLocale()
      リソース・バンドルのLocaleを返します。
      Object getObject​(String key)
      このリソース・バンドルまたはその親リソース・バンドルのいずれかから指定されたキーのオブジェクトを取得します。
      String getString​(String key)
      このリソース・バンドルまたはその親リソース・バンドルのいずれかから指定されたキーの文字列を取得します。
      String[] getStringArray​(String key)
      このリソース・バンドルまたはその親リソース・バンドルのいずれかから指定されたキーの文字列配列を取得します。
      protected abstract Object handleGetObject​(String key)
      このリソース・バンドルから指定されたキーのオブジェクトを取得します。
      protected Set<String> handleKeySet()
      このResourceBundleのみ含まれるキーのSetを返します。
      Set<String> keySet()
      このResourceBundleとその親バンドル内に含まれるすべてのキーのSetを返します。
      protected void setParent​(ResourceBundle parent)
      このバンドルの親バンドルを設定します。
    • フィールドの詳細

      • parent

        protected ResourceBundle parent
        このバンドルの親バンドル。 親バンドルは、このバンドルに特定のリソースが含まれていないときにgetObjectによって検索されます。
    • コンストラクタの詳細

      • ResourceBundle

        public ResourceBundle()
        唯一のコンストラクタです。 サブクラスのコンストラクタによる呼出し用で、通常は暗黙的に呼び出されます。
    • メソッドの詳細

      • getBaseBundleName

        public String getBaseBundleName()
        既知の場合はこのバンドルのベース名を返します。不明の場合はnullを返します。 nullでない場合、これは、リソース・バンドルがロードされたときにResourceBundle.getBundle(...)メソッドに渡されたbaseNameパラメータの値です。
        戻り値:
        ResourceBundle.getBundle(...)メソッドに渡され、このメソッドが予期する、リソース・バンドルのベース名。
        導入されたバージョン:
        1.8
        関連項目:
        getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader)
      • getString

        public final String getString​(String key)
        このリソース・バンドルまたはその親リソース・バンドルのいずれかから指定されたキーの文字列を取得します。 このメソッドを呼び出すことは、次を呼び出すことと同じです。
        (String) getObject(key).
        パラメータ:
        key - 目的の文字列のキー
        戻り値:
        指定されたキーの文字列
        例外:
        NullPointerException - keynullである場合
        MissingResourceException - 指定されたキーのオブジェクトが見つからない場合
        ClassCastException - 指定されたキーの見つかったオブジェクトが文字列でない場合
      • getStringArray

        public final String[] getStringArray​(String key)
        このリソース・バンドルまたはその親リソース・バンドルのいずれかから指定されたキーの文字列配列を取得します。 このメソッドを呼び出すことは、次を呼び出すことと同じです。
        (String[]) getObject(key).
        パラメータ:
        key - 目的の文字列配列のキー
        戻り値:
        指定されたキーの文字列配列
        例外:
        NullPointerException - keynullである場合
        MissingResourceException - 指定されたキーのオブジェクトが見つからない場合
        ClassCastException - 指定されたキーの見つかったオブジェクトが文字列配列でない場合
      • getObject

        public final Object getObject​(String key)
        このリソース・バンドルまたはその親リソース・バンドルのいずれかから指定されたキーのオブジェクトを取得します。 このメソッドは、最初にhandleGetObjectを使用して、このリソース・バンドルからオブジェクトを取得しようとします。 失敗した場合、親リソース・バンドルがnullでないときは、親のgetObjectメソッドを呼び出します。 それでも取得できない場合は、MissingResourceExceptionをスローします。
        パラメータ:
        key - 目的のオブジェクトのキー
        戻り値:
        指定されたキーのオブジェクト
        例外:
        NullPointerException - keynullである場合
        MissingResourceException - 指定されたキーのオブジェクトが見つからない場合
      • getLocale

        public Locale getLocale()
        リソース・バンドルのLocaleを返します。 このメソッドは、返されたリソース・バンドルが本当に要求されたロケールに対応しているか、またはフォール・バックであるかを判定するために、getBundle()を呼び出したあとで使用できます。
        戻り値:
        このリソース・バンドルのロケール
      • setParent

        protected void setParent​(ResourceBundle parent)
        このバンドルの親バンドルを設定します。 親バンドルは、このバンドルに特定のリソースが含まれていないときにgetObjectによって検索されます。
        パラメータ:
        parent - このバンドルの親バンドル。
      • getBundle

        public static final ResourceBundle getBundle​(String baseName,
                                                     ResourceBundle.Control control)
        指定された基底名、デフォルトのロケール、および指定されたコントロールに基づいて、リソース・バンドルを返します。 このメソッドを呼び出すことは、次を呼び出すことと同じです。
         getBundle(baseName, Locale.getDefault(),
                   this.getClass().getClassLoader(), control),
         
        getClassLoader()が、ResourceBundleのセキュリティ特権により実行されることだけが異なります。 ResourceBundle.Controlを使用したリソース・バンドル・ロード処理の詳細は、getBundleを参照してください。
        パラメータ:
        baseName - リソース・バンドルの基底名。完全指定クラス名
        control - リソース・バンドル・ロード処理のための情報を提供するコントロール
        戻り値:
        指定された基底名とデフォルトのロケールのリソース・バンドル
        例外:
        NullPointerException - baseNameまたはcontrolnullである場合
        MissingResourceException - 指定された基底名のリソース・バンドルが見つからない場合
        IllegalArgumentException - 指定されたcontrolが正しく実行されない場合(たとえば、control.getCandidateLocalesがnullを返す場合)。 controlの検証が必要に応じて実行されることに注意。
        UnsupportedOperationException - このメソッドが名前付きモジュールで呼び出された場合
        導入されたバージョン:
        1.6
      • getBundle

        public static ResourceBundle getBundle​(String baseName,
                                               Module module)
        指定されたモジュールに代わって、指定したベース名とデフォルトのロケールを使用してリソース・バンドルを取得します。 このメソッドは、これは以下を呼び出すのと同じです
        getBundle(baseName, Locale.getDefault(), module)
        パラメータ:
        baseName - リソース・バンドルの基底名。完全指定クラス名
        module - リソース・バンドルが検索されるモジュール
        戻り値:
        指定された基底名とデフォルトのロケールのリソース・バンドル
        例外:
        NullPointerException - baseNameまたはmodulenullの場合
        SecurityException - セキュリティ・マネージャが存在し、呼び出し元が指定されたモジュールではなく、RuntimePermission("getClassLoader")を持たない場合
        MissingResourceException - 指定された基本名のリソース・バンドルが指定されたモジュールで見つからない場合
        導入されたバージョン:
        9
        関連項目:
        ResourceBundleProvider, 「リソース・バンドルの検索とロードの戦略」, 「リソース・バンドルと名前付きモジュール」
      • getBundle

        public static ResourceBundle getBundle​(String baseName,
                                               Locale targetLocale,
                                               Module module)
        指定されたモジュールに代わって、指定されたベース名とロケールを使用してリソース・バンドルを取得します。

        名前付きモジュール内のリソース・バンドルをカプセル化することができます。 リソース・バンドルが「サービス・プロバイダ」からロードされるとき、呼び出し側モジュールは「モジュール記述子」に適切なuses句を持っていなければなりません。これは、モジュールが指定されたリソース・バンドルに対してResourceBundleProviderを使用することを宣言します。 それ以外の場合は、Module.getResourceAsStream(String)を呼び出すように、またはClassLoader.getResourceAsStream(String)を呼び出すかのように、指定されたモジュールのクラス・ローダーに可視であるかのように、指定されたモジュールにローカルなリソース・バンドルをロードします。 リソース・バンドルが指定されたモジュールからロードされると、Module.getResourceAsStreamで指定されたカプセル化ルールの影響を受けます。

        指定されたmoduleが名前のないモジュールである場合、このメソッドは、指定された名前のないモジュールのクラス・ローダーに見えるリソース・バンドルをロードするためにgetBundle(baseName, targetLocale, module.getClassLoader()を呼び出すのと同じです。 カスタムResourceBundleControlProvider実装があれば、指定されたモジュールが名前のないモジュールである場合にのみ呼び出されます。

        パラメータ:
        baseName - リソース・バンドルの基底名。完全指定クラス名
        targetLocale - リソース・バンドルが必要なロケール
        module - リソース・バンドルが検索されるモジュール
        戻り値:
        モジュール内の指定された基底名とロケールのリソース・バンドル
        例外:
        NullPointerException - baseNametargetLocale、またはmodulenullの場合
        SecurityException - セキュリティ・マネージャが存在し、呼び出し元が指定されたモジュールではなく、RuntimePermission("getClassLoader")を持たない場合
        MissingResourceException - 指定されたベース名とロケールのリソース・バンドルが指定されたmoduleに見つからない場合
        導入されたバージョン:
        9
        関連項目:
        「リソース・バンドルの検索とロードの戦略」, 「リソース・バンドルと名前付きモジュール」
      • getBundle

        public static final ResourceBundle getBundle​(String baseName,
                                                     Locale targetLocale,
                                                     ResourceBundle.Control control)
        指定された基底名、ターゲット・ロケール、コントロール、および呼出し側のクラス・ローダーを使用して、リソース・バンドルを返します。 このメソッドを呼び出すことは、次を呼び出すことと同じです。
         getBundle(baseName, targetLocale, this.getClass().getClassLoader(),
                   control),
         
        getClassLoader()が、ResourceBundleのセキュリティ特権により実行されることだけが異なります。 ResourceBundle.Controlを使用したリソース・バンドル・ロード処理の詳細は、getBundleを参照してください。
        パラメータ:
        baseName - リソース・バンドルの基底名。完全指定クラス名
        targetLocale - リソース・バンドルが必要なロケール
        control - リソース・バンドル・ロード処理のための情報を提供するコントロール
        戻り値:
        指定された基底名とlocales内のあるLocaleに対するリソース・バンドル
        例外:
        NullPointerException - baseNamelocales、またはcontrolnullの場合
        MissingResourceException - locales内のどのロケールにおいても指定された基底名のリソース・バンドルが見つからない場合。
        IllegalArgumentException - 指定されたcontrolが正しく実行されない場合(たとえば、control.getCandidateLocalesがnullを返す場合)。 controlの検証が必要に応じて実行されることに注意。
        UnsupportedOperationException - このメソッドが名前付きモジュールで呼び出された場合
        導入されたバージョン:
        1.6
      • getBundle

        public static ResourceBundle getBundle​(String baseName,
                                               Locale locale,
                                               ClassLoader loader)
        指定された基底名、ロケール、クラス・ローダーを使用して、リソース・バンドルを取得します。

        このメソッドが名前付きモジュールから呼び出され、指定されたローダーが呼び出し側モジュールのクラス・ローダーである場合、これは以下の呼び出しと同じです:

         getBundle(baseName, targetLocale, callerModule)
         
        それ以外の場合は、以下を呼び出すのと同じです:
         getBundle(baseName, targetLocale, loader, control)
         
        ControlインスタンスがResourceBundleControlProvider SPIによって提供されていない限り、controlResourceBundle.Controlのデフォルト・インスタンスです。 デフォルト動作の変更の説明を参照してください。 デフォルトの動作について次に説明します。

        リソース・バンドルの検索とロードの戦略

        getBundleは、基底名、指定されたロケール、およびデフォルトのロケール(Locale.getDefaultから取得される)を使用して、候補のバンドル名のシーケンスを生成します。 指定されたロケールの言語、スクリプト、国、およびバリアントがすべて空の文字列の場合、候補のバンドル名は基底名のみになります。 それ以外の場合は、指定されたロケールの属性値(言語、スクリプト、国、およびバリアント)から候補ロケールのリストが生成され、基底名に追加されます。 通常、これは次のようになります。

             baseName + "_" + language + "_" + script + "_" + country + "_" + variant
             baseName + "_" + language + "_" + script + "_" + country
             baseName + "_" + language + "_" + script
             baseName + "_" + language + "_" + country + "_" + variant
             baseName + "_" + language + "_" + country
             baseName + "_" + language
         

        最終コンポーネントとして空の文字列を持つ候補のバンドル名は、下線とともに省略されます。 たとえば、国が空の文字列の場合、上記のうち2番目と5番目の候補のバンドル名は省略されます。 また、スクリプトが空の文字列の場合、スクリプトを含む候補名は省略されます。 たとえば、ロケールの言語が「de」、バリアントが「JAVA」の場合は、基底名「MyResource」を使用して次の候補名が生成されます。

             MyResource_de__JAVA
             MyResource_de
         
        バリアントに1つ以上の下線(「_」)が含まれている場合は、最後の下線とそれに続く部分を切り捨てることによってバンドル名のシーケンスが生成され、元のバリアントを持つ候補バンドル名のあとに挿入されます。 たとえば、ロケールの言語が「en」、スクリプトが「Latn」、国が「US」、バリアントが「WINDOWS_VISTA」で、バンドルの基底名が「MyResource」の場合は、次の候補バンドル名のリストが生成されます。
         MyResource_en_Latn_US_WINDOWS_VISTA
         MyResource_en_Latn_US_WINDOWS
         MyResource_en_Latn_US
         MyResource_en_Latn
         MyResource_en_US_WINDOWS_VISTA
         MyResource_en_US_WINDOWS
         MyResource_en_US
         MyResource_en
         
        注: 一部のLocaleでは、候補のバンドル名のリストにほかの名前も含まれている場合や、バンドル名の順序が多少異なる場合があります。 詳細は、getCandidateLocalesのデフォルト実装の説明を参照してください。

        getBundleは実際のリソース・バンドルをインスタンス化できる最初の名前を見つけるために、候補のバンドル名を反復処理します。 デフォルトコントロールのgetFormatsメソッドを使用します。これは、生成される名前ごとに2つのバンドル名を生成します。1つ目はクラス名、2つ目はプロパティ・ファイル名です。 候補バンドル名ごとに、リソース・バンドルを次のように作成しようとします。

        • まず、生成されたクラス名を使用して、クラスをロードしようとします。 指定したクラス・ローダーを使用して、検索してロードしたクラスがResourceBundleと互換性を持つ割当てで、ResourceBundleからのアクセスが可能であり、インスタンス化できる場合は、getBundleはこのクラスの新しいインスタンスを作成して、結果リソース・バンドルとしてそのインスタンスを使用します。
        • それ以外の場合は、getBundleは生成されたプロパティ・ファイル名を使用してプロパティ・リソース・ファイルを見つけようとします。 すべての.文字を/文字に置き換え、.properties文字列を追加して、候補のバンドル名からパス名を生成します。 ClassLoader.getResourceを使ってこの名前を持つリソースの検索を試みます。 (getResourceにおけるリソースは、リソース・バンドルの内容とはまったく関係なく、ファイルなどのデータ・コンテナにすぎないことに注意。) リソースを見つけた場合、リソースの内容から新しいPropertyResourceBundleインスタンスを作成しようとします。 成功した場合は、このインスタンスは、結果リソース・バンドルになります。

        結果リソース・バンドルがインスタンス化されるか、候補バンドル名のリストが終わるまで、これが繰り返されます。 一致するリソース・バンドルが見つからない場合は、デフォルトのコントロールのgetFallbackLocaleメソッドが呼び出されて、現在のデフォルト・ロケールが返されます。 候補ロケール名の新しいシーケンスが、このロケールを使用して生成され、上記のように再度検索されます。

        それでもなお結果バンドルが見つからない場合は、単独の基底名が検索されます。 これも失敗した場合は、MissingResourceExceptionがスローされます。

        結果リソース・バンドルが見つかったときは、その親チェーンがインスタンス化されます 結果バンドルにすでに親が存在している場合(おそらくキャッシュから返されたため)、連鎖は完成します。

        それ以外の場合、getBundleは、結果リソース・バンドルが生成されたパスで使用された候補ロケール・リストの残り部分を調べます。 (前述したように、最終コンポーネントが空の文字列である場合、候補のバンドル名は省略されます。) 候補リストの終わりに到達した場合は、単純なバンドル名を試します。 候補のバンドル名ごとに、リソース・バンドルのインスタンス化を試みます(前述したように、まずクラスを検索し、次にプロパティ・ファイルを検索します)。

        それが成功するたびに、前にインスタンス化したリソース・バンドルのsetParentメソッドを新しいリソース・バンドルで呼び出します。 名前のリストが終わるまで、または現在のバンドルにnull以外の親がまだ存在していないかぎり、これが繰り返されます。

        親連鎖が完成したら、バンドルが返されます。

        注: getBundleは、インスタンス化したリソース・バンドルをキャッシュし、同じリソース・バンドルのインスタンスを複数回返す可能性があります。

        注: baseName引数は完全指定されたクラス名である必要があります。 ただし、旧バージョンとの互換性のために、Java SEランタイム環境ではこれを検証しないため、完全修飾クラス名("."を使用して)の代わりにパス名("/"を使用して)を指定することでPropertyResourceBundleにアクセスできます。

        例:

        次のクラスとプロパティ・ファイルが提供されています。

        • MyResources.class
        • MyResources.properties
        • MyResources_fr.properties
        • MyResources_fr_CH.class
        • MyResources_fr_CH.properties
        • MyResources_en.properties
        • MyResources_es_ES.class
        すべてのファイルの内容が有効です(つまり、「.class」ファイルはResourceBundleのpublic非抽象サブクラスを含んでおり、「.properties」ファイルは構文的に正しい)。 デフォルトのロケールはLocale("en", "GB")です。

        getBundleを次の引数で呼び出すと、リソース・バンドルが次のようにインスタンス化されます。

        getBundle()ロケールからリソース・バンドルへのマッピング
        Localeリソース・バンドル
        Locale("fr", "CH")MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class
        Locale("fr", "FR")MyResources_fr.properties, parent MyResources.class
        Locale("de", "DE")MyResources_en.properties, parent MyResources.class
        Locale("en", "US")MyResources_en.properties, parent MyResources.class
        Locale("es", "ES")MyResources_es_ES.class, parent MyResources.class

        ファイルMyResources_fr_CH.propertiesはMyResources_fr_CH.classによって隠されるため、使用されません。 同様に、MyResources.propertiesもMyResources.classによって隠されます。

        APIの注:
        呼び出し側モジュールが名前付きモジュールであり、指定されたloaderが呼び出し側モジュール・クラス・ローダーである場合、このメソッドはgetBundle(baseName, locale)と等価です。それ以外の場合は、名前付きモジュールからリソース・バンドルが見つからないことがあります。 getBundle(String, Locale, Module)を使用して、代わりに特定のモジュールでリソース・バンドルをロードしてください。
        パラメータ:
        baseName - リソース・バンドルの基底名。完全指定クラス名
        locale - リソース・バンドルが必要なロケール
        loader - リソース・バンドルのロード元のクラス・ローダー
        戻り値:
        指定された基底名とロケールのリソース・バンドル
        例外:
        NullPointerException - baseNamelocale、またはloadernullの場合
        MissingResourceException - 指定された基底名のリソース・バンドルが見つからない場合
        導入されたバージョン:
        1.2
        関連項目:
        リソース・バンドルと名前付きモジュール
      • getBundle

        public static ResourceBundle getBundle​(String baseName,
                                               Locale targetLocale,
                                               ClassLoader loader,
                                               ResourceBundle.Control control)
        指定された基底名、ターゲット・ロケール、クラス・ローダー、およびコントロールを使用して、リソース・バンドルを返します。 control引数を持たないgetBundleファクトリ・メソッドとは異なり、指定されたcontrolは、リソース・バンドルを特定してインスタンス化する方法を指定します。 基本的に、controlが指定された場合のバンドル・ロード処理の実行手順は、次のようになります。
        1. このファクトリ・メソッドは、指定されたbaseNametargetLocale、およびloaderに対するリソース・バンドルを、キャッシュ内で検索します。 要求されたリソース・バンドルのインスタンスがキャッシュ内で見つかり、そのインスタンスとすべての親インスタンスの有効期間がまだ過ぎていない場合には、そのインスタンスが呼出し元に返されます。 それ以外の場合、このファクトリ・メソッドは次のロード処理へと進みます。
        2. バンドル名またはリソース名を生成する目的で、control.getFormatsメソッドが呼び出され、リソース・バンドル形式が取得されます。 文字列"java.class""java.properties"はそれぞれ、クラス・ベースのリソース・バンドルとプロパティ・ベースのリソース・バンドルを表します。 "java."で始まるその他の文字列は、将来の拡張用として予約されているため、アプリケーション定義形式では使用しないでください。 その他の文字列は、アプリケーション定義形式を表します。
        3. control.getCandidateLocalesメソッドがターゲット・ロケールを指定して呼び出され、リソース・バンドルの検索に使用される候補Localeのリストが取得されます。
        4. control.newBundleメソッドが呼び出され、この基底バンドル名、ある候補ロケール、およびある形式に対するResourceBundleがインスタンス化されます。 (後述のキャッシュ検索に関する注を参照。) この手順は候補ロケールと形式のすべての組み合わせについて反復され、newBundleメソッドがResourceBundleインスタンスを返すかすべての組み合わせが使用された時点で終了します。 たとえば、候補ロケールがLocale("de", "DE")Locale("de")、およびLocale("")であり、形式が"java.class""java.properties"であった場合、control.newBundleの呼出し時に使用すべきロケールと形式の組み合わせのシーケンスは、次のようになります。
          newBundle用のロケール-フォーマットの組合せ
          索引 Locale format
          1 Locale("de", "DE") java.class
          2 Locale("de", "DE") java.properties
          3 Locale("de") java.class
          4 Locale("de") java.properties
          5 Locale("") java.class
          6 Locale("") java.properties
        5. 1つ前の手順でリソース・バンドルが1つも見つからなかった場合は、手順6に進みます。 見つかったバンドルが基底バンドル(Locale("")に対するバンドル)であり、候補ロケール・リストにLocale("")しか含まれていなかった場合には、そのバンドルを呼出し元に返します。 見つかったバンドルが基底バンドルであるが、候補ロケール・リストにLocale("")以外のロケールが含まれていた場合には、そのバンドルを保留して手順6に進みます。 見つかったバンドルが基底バンドルでない場合は、手順7に進みます。
        6. リソース・バンドルのさらなる検索を試みるために、control.getFallbackLocaleメソッドが呼び出され、フォール・バック・ロケール(現在のターゲット・ロケールの代替となるロケール)が取得されます。 このメソッドがnull以外のロケールを返した場合、それが次のターゲット・ロケールとなり、手順3からロード処理が開始されます。 それ以外の場合、1つ前の手順5で基底バンドルが見つかり、それを保留していた場合には、その基底バンドルがこの時点で呼出し元に返されます。 それ以外の場合は、MissingResourceExceptionがスローされます。
        7. この時点で、基底バンドル以外のリソース・バンドルが見つかっています。 このバンドルが自身の初期化中に親を設定した場合には、このバンドルが呼出し元に返されます。 それ以外の場合、その検索に使用された候補ロケール・リストに基づいて、その親連鎖がインスタンス化されます。 最後に、そのバンドルが呼出し元に返されます。

        前述のリソース・バンドル・ロード処理の間、このファクトリ・メソッドはcontrol.newBundleメソッドを呼び出す前にキャッシュをルックアップします。 キャッシュ内で見つかったリソース・バンドルの有効期間が期限切れの場合、ファクトリ・メソッドはcontrol.needsReloadメソッドを呼び出し、リソース・バンドルを再ロードする必要があるかどうかを判定します。 再ロードが必要な場合、ファクトリ・メソッドはcontrol.newBundleを呼び出してリソース・バンドルを再ロードします。 control.newBundlenullを返した場合、ファクトリ・メソッドは、存在しないリソース・バンドルの目印として、ダミーのリソース・バンドルをキャッシュ内に格納します。これにより、後続の要求に対する検索オーバーヘッドを回避できます。 そのようなダミーのリソース・バンドルは、controlで指定されたのと同じ有効期限制御下に入ります。

        デフォルトでは、ロードされたリソース・バンドルのすべてがキャッシュに格納されます。 詳細は、control.getTimeToLiveを参照してください。

        デフォルトのResourceBundle.Control実装を使用したバンドル・ロード処理の例を、次に示します。

        条件:

        • 基底名: foo.bar.Messages
        • 要求されたLocale: Locale.ITALY
        • デフォルトのLocale: Locale.FRENCH
        • 使用可能なリソース・バンドル: foo/bar/Messages_fr.propertiesおよびfoo/bar/Messages.properties

        まず、getBundleは、次の順番でリソース・バンドルのロードを試みます。

        • クラスfoo.bar.Messages_it_IT
        • ファイルfoo/bar/Messages_it_IT.properties
        • クラスfoo.bar.Messages_it
        • ファイルfoo/bar/Messages_it.properties
        • クラスfoo.bar.Messages
        • ファイルfoo/bar/Messages.properties

        この時点で、getBundlefoo/bar/Messages.propertiesを見つけます。これは、ベース・バンドルなので保留にされます。getBundlecontrol.getFallbackLocale("foo.bar.Messages", Locale.ITALY)を呼び出します。Locale.FRENCHが返されます。 次に、getBundleは次の順番でバンドルのロードを試みます。

        • クラスfoo.bar.Messages_fr
        • ファイルfoo/bar/Messages_fr.properties
        • クラスfoo.bar.Messages
        • ファイルfoo/bar/Messages.properties

        getBundlefoo/bar/Messages_fr.propertiesを見つけ、ResourceBundleインスタンスを作成します。 次に、getBundleは候補ロケールのリストからその親チェーンを設定します。 リスト内で見つかるのはfoo/bar/Messages.propertiesだけです。getBundleは、foo/bar/Messages_fr.propertiesに対するインスタンスの親になるResourceBundleインスタンスを作成します。

        パラメータ:
        baseName - リソース・バンドルの基底名。完全指定クラス名
        targetLocale - リソース・バンドルが必要なロケール
        loader - リソース・バンドルのロード元のクラス・ローダー
        control - リソース・バンドル・ロード処理のための情報を提供するコントロール
        戻り値:
        指定された基底名とロケールのリソース・バンドル
        例外:
        NullPointerException - baseNametargetLocaleloader、またはcontrolnullの場合
        MissingResourceException - 指定された基底名のリソース・バンドルが見つからない場合
        IllegalArgumentException - 指定されたcontrolが正しく実行されない場合(たとえば、control.getCandidateLocalesがnullを返す場合)。 controlの検証が必要に応じて実行されることに注意。
        UnsupportedOperationException - このメソッドが名前付きモジュールで呼び出された場合
        導入されたバージョン:
        1.6
      • clearCache

        public static final void clearCache()
        呼び出し元モジュールによってロードされたすべてのリソース・バンドルをキャッシュから削除します。
        導入されたバージョン:
        1.6
        関連項目:
        ResourceBundle.Control.getTimeToLive(String,Locale)
      • clearCache

        public static final void clearCache​(ClassLoader loader)
        指定されたクラス・ローダーによってロードされたすべてのリソース・バンドルをキャッシュから削除します。
        パラメータ:
        loader - クラス・ローダー
        例外:
        NullPointerException - loaderがnullである場合
        導入されたバージョン:
        1.6
        関連項目:
        ResourceBundle.Control.getTimeToLive(String,Locale)
      • handleGetObject

        protected abstract Object handleGetObject​(String key)
        このリソース・バンドルから指定されたキーのオブジェクトを取得します。 このリソース・バンドルが、指定されたキーのオブジェクトを含まない場合は、nullを返します。
        パラメータ:
        key - 目的のオブジェクトのキー
        戻り値:
        指定されたキーのオブジェクト、またはnull
        例外:
        NullPointerException - keynullである場合
      • getKeys

        public abstract Enumeration<String> getKeys()
        キーのリストを返します。
        戻り値:
        このResourceBundleとその親バンドル内に含まれるキーのEnumeration
      • containsKey

        public boolean containsKey​(String key)
        指定されたkeyがこのResourceBundleまたはその親バンドル内に含まれるかどうかを判定します。
        パラメータ:
        key - リソースのkey
        戻り値:
        指定されたkeyがこのResourceBundleまたはその親バンドル内に含まれる場合はtrue、それ以外の場合はfalse
        例外:
        NullPointerException - keynullである場合
        導入されたバージョン:
        1.6
      • keySet

        public Set<String> keySet()
        このResourceBundleとその親バンドル内に含まれるすべてのキーのSetを返します。
        戻り値:
        このResourceBundleとその親バンドル内に含まれるすべてのキーのSet
        導入されたバージョン:
        1.6
      • handleKeySet

        protected Set<String> handleKeySet()
        このResourceBundleのみ含まれるキーのSetを返します。

        デフォルト実装は、getKeysメソッドによって返されるキーのSetを返します(handleGetObjectメソッドがnullを返すものを除く)。 Setが作成されると、その値がこのResourceBundle内に保存されます。これにより、次の呼出し時に同じSetが生成されるのを防ぐことができます。 サブクラスはこのメソッドをオーバーライドして、処理の高速化を図ることができます。

        戻り値:
        このResourceBundleにのみ含まれているキーのSet
        導入されたバージョン:
        1.6