- 既知のすべての実装クラス:
AbstractResourceBundleProvider
public interface ResourceBundleProvider
ResourceBundleProvider
は、リソース・バンドルのサービス・プロバイダ・インタフェースです。 これは、ResourceBundle.getBundle
ファクトリ・メソッドによって、ServiceLoader
を介してモジュールとしてデプロイされたサービス・プロバイダを検索してロードするために使用されます。
リソース・バンドル・サービスの開発
与えられたbaseName
のリソース・バンドルのサービスは、以下の形式の完全修飾クラス名を持たなければなりません:
<package of baseName> + ".spi." + <simple name of baseName> + "Provider"
サービス・タイプは、リソース・バンドル・プロバイダとは別のモジュールにパッケージ化されている可能性があるため、spi
サブパッケージに含まれています。 たとえば、com.example.app.MyResources
というリソース・バンドルのサービスは、com.example.app.spi.MyResourcesProvider
である必要があります:
package com.example.app.spi; public interface MyResourcesProvider extends ResourceBundleProvider { }
リソース・バンドル・サービス・プロバイダのデプロイ
リソース・バンドルは、モジュール内の1つ以上のサービス・プロバイダにデプロイできます。 たとえば、"com.example.app.spi.MyResourcesProvider
"という名前のサービスのプロバイダには、次の実装クラスがあります:
この例では、フランス語ロケールの"import com.example.app.spi.MyResourcesProvider; class MyResourcesProviderImpl extends AbstractResourceBundleProvider implements MyResourcesProvider { public MyResourcesProviderImpl() { super("java.properties"); } // this provider maps the resource bundle to per-language package protected String toBundleName(String baseName, Locale locale) { return "p." + locale.getLanguage() + "." + baseName; } public ResourceBundle getBundle(String baseName, Locale locale) { // this module only provides bundles in French if (locale.equals(Locale.FRENCH)) { return super.getBundle(baseName, locale); } // otherwise return null return null; } }
com.example.app.MyResources
"リソース・バンドルを提供しています。 従来、すべてのロケールのリソース・バンドルは、リソース・バンドルのベース名と同じパッケージにパッケージされていました。 リソース・バンドルを複数のモジュールにデプロイし、同じ名前のパッケージ「分割パッケージ」を含む2つのモジュールをサポートしていない場合、このモジュールでリソース・バンドルを別のパッケージにパッケージ化することができます。フランス語ロケールの場合はcom.example.app.fr
です。
プロバイダは、複数のサービスを提供できます。それぞれのサービスは、異なるベース名のリソース・バンドルのサービスです。
AbstractResourceBundleProvider
はResourceBundleProvider
の基本的な実装を提供し、サブクラスはtoBundleName
メソッドをオーバーライドして、ロードするリソースのプロバイダ固有のロケーション(言語単位のパッケージなど)を返すことができます。 プロバイダは、たとえばResourceBundleProvider.getBundle
メソッドをオーバーライドして、既知のサポートされているロケールを検索したり、リソース・バンドルをXMLなどの他の形式で返すことができます。
このプロバイダ・モジュールのモジュール宣言では、次のディレクティブを指定します:
provides com.example.app.spi.MyResourcesProvider with com.example.impl.MyResourcesProviderImpl;
プロバイダからリソース・バンドルを取得
サービス・プロバイダからリソース・バンドルを取得するためのResourceBundle.getBundle
ファクトリ・メソッドの1つを呼び出す「消費者モジュール」のモジュール宣言では、次のディレクティブを指定する必要があります:
uses com.example.app.spi.MyResourcesProvider;
ResourceBundle.getBundle("com.example.app.MyResource", locale)
は、com.example.app.spi.MyResourcesProvider
サービスのプロバイダを探してロードし、ResourceBundleProvider.getBundle("com.example.app.MyResource", locale)
を呼び出して、指定されたベース名とロケールのリソース・バンドルを検索します。 コンシューマ・モジュールがcom.example.app.spi.MyResourcesProvider
のリソース・バンドル・サービス・プロバイダである場合、ResourceBundle.getBundle
はリソース・バンドルをサービス・プロバイダからのみ検索します。 それ以外の場合、ResourceBundle.getBundle
は、呼び出されているResourceBundle.getBundle
メソッドの仕様に従って、他のモジュールおよびクラスパス内のリソース・バンドルの検索を続けることができます。 - 導入されたバージョン:
- 9
- 関連項目:
-
メソッドのサマリー
修飾子と型メソッド説明指定されたバンドル名とロケールのResourceBundle
を返します。
-
メソッドの詳細
-
getBundle
ResourceBundle getBundle(String baseName, Locale locale) 指定されたバンドル名とロケールのResourceBundle
を返します。 このメソッドは、指定されたパラメータに対してResourceBundle
が見つからない場合はnull
を返します。- パラメータ:
baseName
- リソース・バンドルの基底バンドル名。完全指定クラス名locale
- リソース・バンドルをロードする必要があるロケール- 戻り値:
- 指定されたパラメータ用に作成されたResourceBundle、または指定されたパラメータの
ResourceBundle
が見つからない場合はnull
-