モジュール 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
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    ResourceBundle getBundle​(String baseName, Locale locale)
    指定されたバンドル名とロケールのResourceBundleを返します。
  • メソッドの詳細

    • getBundle

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