- java.lang.Object
-
- 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"));
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, Locale)
を呼び出す名前付きモジュールのコードは、呼び出し元モジュール(「呼び出し元モジュール」)にリソース・バンドルを配置します。- リソース・バンドルが、呼び出し元モジュールとは別の名前付きモジュールにデプロイされている場合、それらのリソース・バンドルは
ResourceBundleProvider
のサービス・プロバイダからロードする必要があります。 呼び出し側モジュールは"uses
"を宣言する必要があり、サービス・インタフェース名はベース名のパッケージ名、文字列".spi.
"、基本名の単純クラス名、および文字列"Provider
"の連結です。 リソース・バンドルを含む「バンドル・プロバイダ・モジュール」は、サービス・インタフェース名とその実装クラス名で"provides
"を宣言する必要があります。 たとえば、ベース名が"com.example.app.MyResources
"の場合、呼び出し側モジュールは"uses com.example.app.spi.MyResourcesProvider;
"を宣言し、リソース・バンドルを含むモジュールはcom.example.app.internal.MyResourcesProviderImpl
を実装クラスcom.example.app.spi.MyResourcesProvider
として"provides com.example.app.spi.MyResourcesProvider with com.example.app.internal.MyResourcesProviderImpl;
"を宣言する必要があります。 - XMLなどの名前付きモジュールで非標準形式を使用する場合は、
ResourceBundleProvider
を使用する必要があります。 ClassLoader
を使用したgetBundle
メソッドは、指定されたモジュールで指定されたClassLoader
を使用してリソース・バンドルを見つけることができない場合があります。 代わりに、Module
を使用したgetBundle
メソッドを使用できます。ResourceBundle.Control
は、指定されたモジュールではサポートされていません。ResourceBundle.Control
を含むgetBundle
メソッドが名前付きモジュールで呼び出された場合、このメソッドはUnsupportedOperationException
をスローします。ResourceBundleControlProvider
のサービス・プロバイダは、指定されたモジュールでは無視されます。
ResourceBundleProviderサービス・プロバイダ
getBundle
ファクトリ・メソッドは、ResourceBundleProvider
のサービス・プロバイダを読み込みます(ServiceLoader
を使用しています)。 サービス型は<package name> + ".spi." + <simple name> + "Provider"
で指定されます。 たとえば、ベース名が"com.example.app.MyResources
"の場合、サービス・タイプはcom.example.app.spi.MyResourcesProvider
です。名前付きモジュールでは、指定したベース名のロードされたサービス・プロバイダがリソース・バンドルをロードするために使用されます。 サービス・プロバイダが利用できない場合、またはサービス・プロバイダがリソース・バンドルを返さず、呼び出し側モジュールが独自のサービス・プロバイダを持たない場合、
getBundle
ファクトリ・メソッドは呼び出し側モジュール内でローカルであり、呼び出し元モジュールのクラス・ローダー。 ローカル・モジュール検索用のリソース・バンドル形式は、"java.class"および"java.properties"です。ResourceBundle.Control
ResourceBundle.Control
クラスは、ResourceBundle.Control
インスタンスを取るgetBundle
ファクトリ・メソッドがバンドル・ロード処理を実行する際に必要とする情報を提供します。 ユーザー独自のサブクラスを実装すれば、標準以外のリソース・バンドル形式を利用できるようにしたり、検索手順を変更したり、キャッシュ・パラメータを定義したりできます。 詳細については、そのクラスとgetBundle
ファクトリ・メソッドの説明を参照してください。ResourceBundle.Control
インスタンスを使用しない「getBundle
ファクトリ用」メソッドは、「デフォルト動作」リソース・バンドルのロードをカスタムResourceBundleControlProvider
実装で変更できます。 指定されたベース名のResourceBundle.Control
をいずれかのプロバイダが提供する場合、そのResourceBundle.Control
はデフォルトResourceBundle.Control
のかわりに使用されます。 同じベース名をサポートする複数のサービス・プロバイダがある場合、ServiceLoader
から返された最初のサービス・プロバイダが使用されます。 カスタムのResourceBundle.Control
実装は、名前付きモジュールでは無視されます。キャッシュ管理
getBundle
ファクトリ・メソッドによって作成されたリソース・バンドル・インスタンスはデフォルトでキャッシュされ、ファクトリ・メソッドは同じリソース・バンドル・インスタンス(キャッシュされている場合)を複数回返します。getBundle
クライアントは、キャッシュをクリアしたり、有効期間値を使ってキャッシュされたリソース・バンドル・インスタンスの寿命を管理したり、リソース・バンドル・インスタンスをキャッシュしないことを指定したりできます。 詳細については、「getBundle
ファクトリ・メソッド」、clearCache
、ResourceBundle.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_fr
、ExceptionResources_de
など)で1つ、ウィジェットWidgetResource
(WidgetResources_fr
、WidgetResources_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
によって検索されます。
-
-
メソッドの詳細
-
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
-key
がnull
である場合MissingResourceException
- 指定されたキーのオブジェクトが見つからない場合ClassCastException
- 指定されたキーの見つかったオブジェクトが文字列でない場合
-
getStringArray
public final String[] getStringArray(String key)
このリソース・バンドルまたはその親リソース・バンドルのいずれかから指定されたキーの文字列配列を取得します。 このメソッドを呼び出すことは、次を呼び出すことと同じです。(String[])
.getObject
(key)- パラメータ:
key
- 目的の文字列配列のキー- 戻り値:
- 指定されたキーの文字列配列
- 例外:
NullPointerException
-key
がnull
である場合MissingResourceException
- 指定されたキーのオブジェクトが見つからない場合ClassCastException
- 指定されたキーの見つかったオブジェクトが文字列配列でない場合
-
getObject
public final Object getObject(String key)
このリソース・バンドルまたはその親リソース・バンドルのいずれかから指定されたキーのオブジェクトを取得します。 このメソッドは、最初にhandleGetObject
を使用して、このリソース・バンドルからオブジェクトを取得しようとします。 失敗した場合、親リソース・バンドルがnullでないときは、親のgetObject
メソッドを呼び出します。 それでも取得できない場合は、MissingResourceExceptionをスローします。- パラメータ:
key
- 目的のオブジェクトのキー- 戻り値:
- 指定されたキーのオブジェクト
- 例外:
NullPointerException
-key
がnull
である場合MissingResourceException
- 指定されたキーのオブジェクトが見つからない場合
-
getLocale
public Locale getLocale()
リソース・バンドルのLocaleを返します。 このメソッドは、返されたリソース・バンドルが本当に要求されたロケールに対応しているか、またはフォール・バックであるかを判定するために、getBundle()を呼び出したあとで使用できます。- 戻り値:
- このリソース・バンドルのロケール
-
setParent
protected void setParent(ResourceBundle parent)
このバンドルの親バンドルを設定します。 親バンドルは、このバンドルに特定のリソースが含まれていないときにgetObject
によって検索されます。- パラメータ:
parent
- このバンドルの親バンドル。
-
getBundle
public static final ResourceBundle getBundle(String baseName)
指定された基底名、デフォルトのロケール、および呼出し側のクラス・ローダーを使用して、リソース・バンドルを取得します。 このメソッドを呼び出すことは、次を呼び出すことと同じです。getBundle(baseName, Locale.getDefault(), this.getClass().getClassLoader())
,getClassLoader()
が、ResourceBundle
のセキュリティ特権により実行されることだけが異なります。 検索とインスタンス化の方法の詳細は、getBundle
を参照してください。- パラメータ:
baseName
- リソース・バンドルの基底名。完全指定クラス名- 戻り値:
- 指定された基底名とデフォルトのロケールのリソース・バンドル
- 例外:
NullPointerException
-baseName
がnull
である場合MissingResourceException
- 指定された基底名のリソース・バンドルが見つからない場合
-
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
またはcontrol
がnull
である場合MissingResourceException
- 指定された基底名のリソース・バンドルが見つからない場合IllegalArgumentException
- 指定されたcontrol
が正しく実行されない場合(たとえば、control.getCandidateLocales
がnullを返す場合)。control
の検証が必要に応じて実行されることに注意。UnsupportedOperationException
- このメソッドが名前付きモジュールで呼び出された場合- 導入されたバージョン:
- 1.6
-
getBundle
public static final ResourceBundle getBundle(String baseName, Locale locale)
指定された基底名、ロケール、および呼出し側のクラス・ローダーを使用して、リソース・バンドルを取得します。 このメソッドを呼び出すことは、次を呼び出すことと同じです。getBundle(baseName, locale, this.getClass().getClassLoader())
,getClassLoader()
が、ResourceBundle
のセキュリティ特権により実行されることだけが異なります。 検索とインスタンス化の方法の詳細は、getBundle
を参照してください。- パラメータ:
baseName
- リソース・バンドルの基底名。完全指定クラス名locale
- リソース・バンドルが必要なロケール- 戻り値:
- 指定された基底名とロケールのリソース・バンドル
- 例外:
NullPointerException
-baseName
またはlocale
がnull
である場合MissingResourceException
- 指定された基底名のリソース・バンドルが見つからない場合
-
getBundle
public static ResourceBundle getBundle(String baseName, Module module)
指定されたモジュールに代わって、指定したベース名とデフォルトのロケールを使用してリソース・バンドルを取得します。 このメソッドは、getBundle(baseName, Locale.getDefault(), module)
名前付きモジュール内のリソース・バンドルをカプセル化することができます。 リソース・バンドルがプロバイダからロードされるとき、呼び出し元モジュールは、モジュールが
<package name> + ".spi." + <simple name> + "Provider"
の実装を使用することを宣言するために、「モジュール記述子」に適切なuses句を持つ必要があります。 それ以外の場合は、指定されたモジュール内でローカルであるリソース・バンドル、または指定されたモジュール(詳細は「名前付きモジュールのリソース・バンドル」セクションを参照してください)のクラス・ローダーに表示されるリソース・バンドルをロードします。 リソース・バンドルが指定されたモジュールからロードされると、Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。- パラメータ:
baseName
- リソース・バンドルの基底名。完全指定クラス名module
- リソース・バンドルが検索されるモジュール- 戻り値:
- 指定された基底名とデフォルトのロケールのリソース・バンドル
- 例外:
NullPointerException
-baseName
またはmodule
がnull
の場合SecurityException
- セキュリティ・マネージャが存在し、呼び出し元が指定されたモジュールではなく、RuntimePermission("getClassLoader")
を持たない場合MissingResourceException
- 指定された基本名のリソース・バンドルが指定されたモジュールで見つからない場合- 導入されたバージョン:
- 9
- 関連項目:
ResourceBundleProvider
-
getBundle
public static ResourceBundle getBundle(String baseName, Locale targetLocale, Module module)
指定されたモジュールに代わって、指定されたベース名とロケールを使用してリソース・バンドルを取得します。名前付きモジュール内のリソース・バンドルをカプセル化することができます。 リソース・バンドルがプロバイダからロードされるとき、呼び出し元モジュールは、モジュールが
<package name> + ".spi." + <simple name> + "Provider"
の実装を使用することを宣言するために、「モジュール記述子」に適切なuses句を持つ必要があります。 それ以外の場合は、指定されたモジュール内でローカルであるリソース・バンドル、または指定されたモジュール(詳細は「名前付きモジュールのリソース・バンドル」セクションを参照してください)のクラス・ローダーに表示されるリソース・バンドルをロードします。 リソース・バンドルが指定されたモジュールからロードされると、Module.getResourceAsStream
で指定されたカプセル化ルールの影響を受けます。指定された
module
が名前のないモジュールである場合、このメソッドは、指定された名前のないモジュールのクラス・ローダーに見えるリソース・バンドルをロードするためにgetBundle(baseName, targetLocale, module.getClassLoader()
を呼び出すのと同じです。 カスタムResourceBundleControlProvider
実装があれば、指定されたモジュールが名前のないモジュールである場合にのみ呼び出されます。- パラメータ:
baseName
- リソース・バンドルの基底名。完全指定クラス名targetLocale
- リソース・バンドルが必要なロケールmodule
- リソース・バンドルが検索されるモジュール- 戻り値:
- モジュール内の指定された基底名とロケールのリソース・バンドル
- 例外:
NullPointerException
-baseName
、targetLocale
、またはmodule
がnull
の場合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
-baseName
、locales
、またはcontrol
がnull
の場合MissingResourceException
-locales
内のどのロケールにおいても指定された基底名のリソース・バンドルが見つからない場合。IllegalArgumentException
- 指定されたcontrol
が正しく実行されない場合(たとえば、control.getCandidateLocales
がnullを返す場合)。control
の検証が必要に応じて実行されることに注意。UnsupportedOperationException
- このメソッドが名前付きモジュールで呼び出された場合- 導入されたバージョン:
- 1.6
-
getBundle
public static ResourceBundle getBundle(String baseName, Locale locale, ClassLoader loader)
指定された基底名、ロケール、クラス・ローダーを使用して、リソース・バンドルを取得します。このメソッドは、別の
ResourceBundle.Control
がResourceBundleControlProvider
SPIによって提供される場合を除いて、ResourceBundle.Control
のデフォルト・インスタンスを渡してgetBundle(String, Locale, ClassLoader, Control)
を呼び出す場合と同様に動作します。 デフォルト動作の変更の説明を参照してください。名前付きモジュールのリソース・バンドルは、そのモジュール専用です。 呼び出し側が名前付きモジュールにある場合、このメソッドは
ResourceBundleProvider
のサービス・プロバイダからのリソース・バンドルを検出します。 それ以外の場合は、指定されたloader
(詳細は「名前付きモジュールのリソース・バンドル」セクションを参照してください)に表示されるリソース・バンドルをロードします。 呼び出し元が名前付きモジュールにあり、指定されたloader
が呼び出し側クラス・ローダーと異なる場合、または呼び出し元が名前付きモジュールにない場合、このメソッドは名前付きモジュールからリソース・バンドルを検索しません。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
引数は完全指定されたクラス名である必要があります。 ただし、以前のバージョンとの互換性を保つために、SunのJava SE Runtime Environmentはそのことを検証しません。そのため、完全指定されたクラス名(「.」を使用)の代わりにパス名(「/」を使用)を指定して、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
を次の引数で呼び出すと、リソース・バンドルが次のようにインスタンス化されます。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
-baseName
、locale
、またはloader
がnull
の場合MissingResourceException
- 指定された基底名のリソース・バンドルが見つからない場合- 導入されたバージョン:
- 1.2
- まず、生成されたクラス名を使用して、クラスをロードしようとします。 指定したクラス・ローダーを使用して、検索してロードしたクラスがResourceBundleと互換性を持つ割当てで、ResourceBundleからのアクセスが可能であり、インスタンス化できる場合は、
-
getBundle
public static ResourceBundle getBundle(String baseName, Locale targetLocale, ClassLoader loader, ResourceBundle.Control control)
指定された基底名、ターゲット・ロケール、クラス・ローダー、およびコントロールを使用して、リソース・バンドルを返します。 「control
引数なしのgetBundle
ファクトリ・メソッド」とは異なり、指定されたcontrol
は、リソース・バンドルを特定してインスタンス化する方法を指定します。 基本的に、control
が指定された場合のバンドル・ロード処理の実行手順は、次のようになります。- このファクトリ・メソッドは、指定された
baseName
、targetLocale
、およびloader
に対するリソース・バンドルを、キャッシュ内で検索します。 要求されたリソース・バンドルのインスタンスがキャッシュ内で見つかり、そのインスタンスとすべての親インスタンスの有効期間がまだ過ぎていない場合には、そのインスタンスが呼出し元に返されます。 それ以外の場合、このファクトリ・メソッドは次のロード処理へと進みます。 - バンドル名またはリソース名を生成する目的で、
control.getFormats
メソッドが呼び出され、リソース・バンドル形式が取得されます。 文字列"java.class"
と"java.properties"
はそれぞれ、クラス・ベースのリソース・バンドルとプロパティ・ベースのリソース・バンドルを表します。"java."
で始まるその他の文字列は、将来の拡張用として予約されているため、アプリケーション定義形式では使用しないでください。 その他の文字列は、アプリケーション定義形式を表します。 control.getCandidateLocales
メソッドがターゲット・ロケールを指定して呼び出され、リソース・バンドルの検索に使用される候補Locale
のリストが取得されます。control.newBundle
メソッドが呼び出され、この基底バンドル名、ある候補ロケール、およびある形式に対するResourceBundle
がインスタンス化されます。 (後述のキャッシュ検索に関する注を参照。) この手順は候補ロケールと形式のすべての組み合わせについて反復され、newBundle
メソッドがResourceBundle
インスタンスを返すかすべての組み合わせが使用された時点で終了します。 たとえば、候補ロケールがLocale("de", "DE")
、Locale("de")
、およびLocale("")
であり、形式が"java.class"
と"java.properties"
であった場合、control.newBundle
の呼出し時に使用すべきロケールと形式の組み合わせのシーケンスは、次のようになります。ロケール
フォーマット
Locale("de", "DE")
java.class
Locale("de", "DE")
java.properties
Locale("de")
java.class
Locale("de")
java.properties
Locale("")
java.class
Locale("")
java.properties
- 1つ前の手順でリソース・バンドルが1つも見つからなかった場合は、手順6に進みます。 見つかったバンドルが基底バンドル(
Locale("")
に対するバンドル)であり、候補ロケール・リストにLocale("")
しか含まれていなかった場合には、そのバンドルを呼出し元に返します。 見つかったバンドルが基底バンドルであるが、候補ロケール・リストにLocale("")以外のロケールが含まれていた場合には、そのバンドルを保留して手順6に進みます。 見つかったバンドルが基底バンドルでない場合は、手順7に進みます。 - リソース・バンドルのさらなる検索を試みるために、
control.getFallbackLocale
メソッドが呼び出され、フォール・バック・ロケール(現在のターゲット・ロケールの代替となるロケール)が取得されます。 このメソッドがnull以外のロケールを返した場合、それが次のターゲット・ロケールとなり、手順3からロード処理が開始されます。 それ以外の場合、1つ前の手順5で基底バンドルが見つかり、それを保留していた場合には、その基底バンドルがこの時点で呼出し元に返されます。 それ以外の場合は、MissingResourceExceptionがスローされます。 - この時点で、基底バンドル以外のリソース・バンドルが見つかっています。 このバンドルが自身の初期化中に親を設定した場合には、このバンドルが呼出し元に返されます。 それ以外の場合、その検索に使用された候補ロケール・リストに基づいて、その親連鎖がインスタンス化されます。 最後に、そのバンドルが呼出し元に返されます。
前述のリソース・バンドル・ロード処理の間、このファクトリ・メソッドは
control.newBundle
メソッドを呼び出す前にキャッシュをルックアップします。 キャッシュ内で見つかったリソース・バンドルの有効期間が期限切れの場合、ファクトリ・メソッドはcontrol.needsReload
メソッドを呼び出し、リソース・バンドルを再ロードする必要があるかどうかを判定します。 再ロードが必要な場合、ファクトリ・メソッドはcontrol.newBundle
を呼び出してリソース・バンドルを再ロードします。control.newBundle
がnull
を返した場合、ファクトリ・メソッドは、存在しないリソース・バンドルの目印として、ダミーのリソース・バンドルをキャッシュ内に格納します。これにより、後続の要求に対する検索オーバーヘッドを回避できます。 そのようなダミーのリソース・バンドルは、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
この時点で、
getBundle
はfoo/bar/Messages.properties
を見つけます。これは、ベース・バンドルなので保留にされます。getBundle
はcontrol.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
getBundle
はfoo/bar/Messages_fr.properties
を見つけ、ResourceBundle
インスタンスを作成します。 次に、getBundle
は候補ロケールのリストからその親チェーンを設定します。 リスト内で見つかるのはfoo/bar/Messages.properties
だけです。getBundle
は、foo/bar/Messages_fr.properties
に対するインスタンスの親になるResourceBundle
インスタンスを作成します。- パラメータ:
baseName
- リソース・バンドルの基底名。完全指定クラス名targetLocale
- リソース・バンドルが必要なロケールloader
- リソース・バンドルのロード元のクラス・ローダーcontrol
- リソース・バンドル・ロード処理のための情報を提供するコントロール- 戻り値:
- 指定された基底名とロケールのリソース・バンドル
- 例外:
NullPointerException
-baseName
、targetLocale
、loader
、またはcontrol
がnull
の場合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
-key
がnull
である場合
-
getKeys
public abstract Enumeration<String> getKeys()
キーのリストを返します。- 戻り値:
- この
ResourceBundle
とその親バンドル内に含まれるキーのEnumeration
。
-
containsKey
public boolean containsKey(String key)
指定されたkey
がこのResourceBundle
またはその親バンドル内に含まれるかどうかを判定します。- パラメータ:
key
- リソースのkey
- 戻り値:
- 指定された
key
がこのResourceBundle
またはその親バンドル内に含まれる場合はtrue
、それ以外の場合はfalse
。 - 例外:
NullPointerException
-key
がnull
である場合- 導入されたバージョン:
- 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
-
-