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

インタフェースResourceBundleProvider

  • 既知のすべての実装クラス:
    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つのモジュール(split package)はサポートされません。この例では、このプロバイダが言語ごとのパッケージ(フランス語ロケールの場合はcom.example.app.fr)にリソース・バンドルをパッケージ化する、各モジュールのリソース・バンドルを異なるパッケージにパッケージ化できます。

    プロバイダは複数のサービスを提供でき、各サービスは異なるベース名のリソース・バンドルのサービスです。

    AbstractResourceBundleProviderResourceBundleProviderの基本的な実装を提供し、サブクラスはtoBundleNameメソッドをオーバーライドして、ロードされるリソースのプロバイダ固有の場所(言語ごとのパッケージなど)を返すことができます。 プロバイダは、ResourceBundleProvider.getBundleメソッドをオーバーライドできます。たとえば、サポートされている既知のロケールのみを検索したり、XMLなどの他の形式でリソース・バンドルを返したりできます。

    このプロバイダ・モジュールのモジュール宣言では、次のディレクティブを指定します。

         provides com.example.app.spi.MyResourcesProvider with com.example.impl.MyResourcesProviderImpl;
     

    プロバイダからのリソース・バンドルの取得

    サービス・プロバイダからリソース・バンドルを取得するためにResourceBundle.getBundleファクトリ・メソッドのいずれかをコールするコンシューマ・モジュールのモジュール宣言では、次のディレクティブを指定する必要があります。
         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
    関連項目:
    AbstractResourceBundleProviderリソース・バンドルおよび名前付きモジュールServiceLoader
    • メソッドの詳細

      • getBundle

        ResourceBundle getBundle​(String baseName,
                                 Locale locale)
        指定されたバンドル名およびロケールのResourceBundleを返します。 このメソッドは、指定されたパラメータにResourceBundleが見つからない場合にnullを返します。
        パラメータ:
        baseName - リソース・バンドルの基底バンドル名。完全指定クラス名
        locale - リソース・バンドルをロードするロケール
        戻り値:
        指定されたパラメータに対して作成されたResourceBundle、または指定されたパラメータのResourceBundleが見つからない場合はnull