モジュール 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つのモジュールをサポートしていない場合、このモジュールでリソース・バンドルを別のパッケージにパッケージ化することができます。フランス語ロケールの場合はcom.example.app.frです。

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

    AbstractResourceBundleProviderResourceBundleProviderの基本的な実装を提供し、サブクラスは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
    関連項目:
    AbstractResourceBundleProvider, 「リソース・バンドルと名前付きモジュール」, ServiceLoader
    • メソッドの詳細

      • getBundle

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