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

クラスResourceBundle.Control

java.lang.Object
java.util.ResourceBundle.Control
含まれているクラス:
ResourceBundle

public static class ResourceBundle.Control extends Object
ResourceBundle.Controlは、バンドル・ロード処理中にResourceBundle.getBundleファクトリによって呼び出される一連のコールバック・メソッドを定義します。 つまり、ResourceBundle.Controlは、リソース・バンドルのロード時にファクトリ・メソッドと連携して動作します。 コールバック・メソッドのデフォルト実装は、ファクトリ・メソッドがデフォルト動作を実行するために必要な情報を提供します。

ResourceBundle.Controlは、名前のないモジュールにデプロイされたアプリケーション用に設計されています。たとえば、非標準形式のリソース・バンドルをサポートしたり、非伝統的な規則でローカライズされたリソースをパッケージ化することができます。 ResourceBundleProviderは、モジュールに移行するときのResourceBundle.Controlの代わりです。 ResourceBundle.Controlパラメータを受け取るファクトリ・メソッドが呼び出されると、UnsupportedOperationExceptionがスローされます。

コールバック・メソッドの他に、toBundleNameおよびtoResourceNameメソッドが、主にコールバック・メソッドの実装を支援するために定義されています。 ただし、toBundleNameメソッドをオーバーライドすれば、ローカライズ済みリソースの構成やパッケージ化に関する異なる規約を提供できます。 toResourceNameメソッドがfinalになっているのは、リソース名やクラス名の区切り文字の誤用を回避するためです。

2つのファクトリ・メソッドgetControl(List)getNoFallbackControl(List)は、デフォルトのバンドル・ロード処理の一般的なバリエーションを実装したResourceBundle.Controlインスタンスを提供します。

getFormatsメソッドから返される形式とgetCandidateLocalesメソッドから返される候補ロケールは、同じ基底バンドルに対するすべてのResourceBundle.getBundle呼出しで一貫性のあるものでなければいけません。 そうでないと、ResourceBundle.getBundleメソッドが想定外のバンドルを返す可能性があります。 たとえば、ResourceBundle.getBundleの初回呼出し時にgetFormatsメソッドから"java.class"のみが返され、2回目の呼出し時に"java.properties"のみが返された場合、その2回目の呼出しでは、初回呼出し時にキャッシュに格納されたクラス・ベースのバンドルが返されます。

複数のスレッドが同時に使用するResourceBundle.Controlインスタンスは、スレッドセーフでなければいけません。 ResourceBundle.getBundleは、ResourceBundle.Controlのメソッドを呼び出す際に同期処理を行いません。 これらのメソッドのデフォルト実装はスレッドセーフです。

アプリケーションは、getControlファクトリ・メソッドから返されたResourceBundle.Controlインスタンスを指定することもできますし、ResourceBundle.Controlのサブクラスから作成されたインスタンスを指定してバンドル・ロード処理をカスタマイズすることもできます。 デフォルトのバンドル・ロード処理を変更する例を、次に示します。

プログラム例1

次のコードの場合、ResourceBundle.getBundleはプロパティ・ベースのリソースのみを検索します。

 import java.util.*;
 import static java.util.ResourceBundle.Control.*;
 ...
 ResourceBundle bundle =
   ResourceBundle.getBundle("MyResources", Locale.forLanguageTag("fr-CH"),
                            ResourceBundle.Control.getControl(FORMAT_PROPERTIES));
 
ResourceBundle.getBundleの説明のでリソース・バンドルが与えられた場合、このResourceBundle.getBundle呼出しはMyResources_fr_CH.propertiesをロードします(親はMyResources_fr.properties、その親はMyResources.properties)。 (MyResources_fr_CH.propertiesは隠されないが、MyResources_fr_CH.classは隠される。)

プログラム例2

Properties.loadFromXMLを使ってXMLベースのバンドルをロードする例を、次に示します。

 ResourceBundle rb = ResourceBundle.getBundle("Messages",
     new ResourceBundle.Control() {
         public List<String> getFormats(String baseName) {
             if (baseName == null)
                 throw new NullPointerException();
             return Arrays.asList("xml");
         }
         public ResourceBundle newBundle(String baseName,
                                         Locale locale,
                                         String format,
                                         ClassLoader loader,
                                         boolean reload)
                          throws IllegalAccessException,
                                 InstantiationException,
                                 IOException {
             if (baseName == null || locale == null
                   || format == null || loader == null)
                 throw new NullPointerException();
             ResourceBundle bundle = null;
             if (format.equals("xml")) {
                 String bundleName = toBundleName(baseName, locale);
                 String resourceName = toResourceName(bundleName, format);
                 InputStream stream = null;
                 if (reload) {
                     URL url = loader.getResource(resourceName);
                     if (url != null) {
                         URLConnection connection = url.openConnection();
                         if (connection != null) {
                             // Disable caches to get fresh data for
                             // reloading.
                             connection.setUseCaches(false);
                             stream = connection.getInputStream();
                         }
                     }
                 } else {
                     stream = loader.getResourceAsStream(resourceName);
                 }
                 if (stream != null) {
                     BufferedInputStream bis = new BufferedInputStream(stream);
                     bundle = new XMLResourceBundle(bis);
                     bis.close();
                 }
             }
             return bundle;
         }
     });

 ...

 private static class XMLResourceBundle extends ResourceBundle {
     private Properties props;
     XMLResourceBundle(InputStream stream) throws IOException {
         props = new Properties();
         props.loadFromXML(stream);
     }
     protected Object handleGetObject(String key) {
         return props.getProperty(key);
     }
     public Enumeration<String> getKeys() {
         ...
     }
 }
 

APIのノート:
ResourceBundle.Controlは、指定されたモジュールではサポートされていません。 ResourceBundle.Controlを持つResourceBundle.getBundleメソッドが名前付きモジュールで呼び出された場合、このメソッドはUnsupportedOperationExceptionをスローします。 ResourceBundleControlProviderのサービス・プロバイダは、指定されたモジュールでは無視されます。
導入されたバージョン:
1.6
関連項目:
  • フィールドのサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final List<String>
    "java.class"を含む、クラスのみの形式のListです。
    static final List<String>
    デフォルト形式のListであり、文字列"java.class""java.properties"をこの順番で含みます。
    static final List<String>
    "java.properties"を含む、プロパティのみの形式のListです。
    static final long
    ロードされたリソース・バンドル・インスタンスをキャッシュしないための有効期間定数。
    static final long
    キャッシュ内のロード済みリソース・バンドル・インスタンスの有効期限制御を無効にするための有効期間定数。
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    唯一のコンストラクタです。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    getCandidateLocales(String baseName, Locale locale)
    baseNamelocaleの候補ロケールとして、LocaleListを返します。
    getFormatsメソッドが指定されたformatsを返す、ResourceBundle.Controlを返します。
    getFallbackLocale(String baseName, Locale locale)
    ResourceBundle.getBundleファクトリ・メソッドがリソース・バンドルをさらに検索する際のフォール・バック・ロケールとして使用されるLocaleを返します。
    getFormats(String baseName)
    指定されたbaseNameのリソース・バンドルをロードする際に使用すべき形式が格納された、StringListを返します。
    getFormatsメソッドが指定されたformatsを返し、かつgetFallbackLocaleメソッドがnullを返す、ResourceBundle.Controlを返します。
    long
    getTimeToLive(String baseName, Locale locale)
    このResourceBundle.Controlの下でロードされるリソース・バンドルの有効期間(TTL)値を返します。
    boolean
    needsReload(String baseName, Locale locale, String format, ClassLoader loader, ResourceBundle bundle, long loadTime)
    キャッシュ内で有効期限の切れたbundleを再ロードする必要があるかどうかを、loadTimeに指定されたロード時刻やその他のいくつかの条件に基づいて判定します。
    newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
    指定された形式とロケールを持つ指定されたバンドル名のリソース・バンドルを、指定されたクラス・ローダーを必要に応じて使用してインスタンス化します。
    toBundleName(String baseName, Locale locale)
    指定されたbaseNamelocaleをバンドル名に変換します。
    final String
    toResourceName(String bundleName, String suffix)
    指定されたbundleNameClassLoader.getResourceメソッドで必要とされる形式に変換するため、bundleName内のすべての'.''/'に置き換え、末尾に1つの'.'と指定されたファイルsuffixを追加します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • フィールド詳細

    • FORMAT_DEFAULT

      public static final List<String> FORMAT_DEFAULT
      デフォルト形式のListであり、文字列"java.class""java.properties"をこの順番で含みます。 このListは、変更不可能です。
      関連項目:
    • FORMAT_CLASS

      public static final List<String> FORMAT_CLASS
      "java.class"を含む、クラスのみの形式のListです。 このListは、変更不可能です。
      関連項目:
    • FORMAT_PROPERTIES

      public static final List<String> FORMAT_PROPERTIES
      "java.properties"を含む、プロパティのみの形式のListです。 このListは、変更不可能です。
      関連項目:
    • TTL_DONT_CACHE

      public static final long TTL_DONT_CACHE
      ロードされたリソース・バンドル・インスタンスをキャッシュしないための有効期間定数。
      関連項目:
    • TTL_NO_EXPIRATION_CONTROL

      public static final long TTL_NO_EXPIRATION_CONTROL
      キャッシュ内のロード済みリソース・バンドル・インスタンスの有効期限制御を無効にするための有効期間定数。
      関連項目:
  • コンストラクタの詳細

    • Control

      protected Control()
      唯一のコンストラクタです。 (サブクラスのコンストラクタによる呼出し用で、通常は暗黙的に呼び出されます。)
  • メソッドの詳細

    • getControl

      public static final ResourceBundle.Control getControl(List<String> formats)
      getFormatsメソッドが指定されたformatsを返す、ResourceBundle.Controlを返します。 formatsは、FORMAT_PROPERTIESFORMAT_CLASS、またはFORMAT_DEFAULTのいずれかと等しくなる必要があります。 このメソッドによって返されるResourceBundle.Controlインスタンスは単独であり、スレッドセーフです。

      FORMAT_DEFAULTを指定することは、ResourceBundle.Controlクラスをインスタンス化することと等価です。ただし、このメソッドが単独オブジェクトを返す点だけは異なります。

      パラメータ:
      formats - ResourceBundle.Control.getFormatsメソッドによって返される形式
      戻り値:
      指定されたformatsをサポートするResourceBundle.Control
      例外:
      NullPointerException - formatsnullである場合
      IllegalArgumentException - formatsが不明な場合
    • getNoFallbackControl

      public static final ResourceBundle.Control getNoFallbackControl(List<String> formats)
      getFormatsメソッドが指定されたformatsを返し、かつgetFallbackLocaleメソッドがnullを返す、ResourceBundle.Controlを返します。 formatsは、FORMAT_PROPERTIESFORMAT_CLASS、またはFORMAT_DEFAULTのいずれかと等しくなる必要があります。 このメソッドによって返されるResourceBundle.Controlインスタンスは単独であり、スレッドセーフです。
      パラメータ:
      formats - ResourceBundle.Control.getFormatsメソッドによって返される形式
      戻り値:
      指定されたformatsをサポートし、フォール・バックLocaleをサポートしないResourceBundle.Control
      例外:
      NullPointerException - formatsnullである場合
      IllegalArgumentException - formatsが不明な場合
    • getFormats

      public List<String> getFormats(String baseName)
      指定されたbaseNameのリソース・バンドルをロードする際に使用すべき形式が格納された、StringListを返します。 ResourceBundle.getBundleファクトリ・メソッドは、このリスト内の形式を持つリソース・バンドルを、リスト内に指定された順番でロードしようとします。 このメソッドから返されたリストには、少なくとも1つのStringが含まれていなければいけません。 定義済みの形式は、クラス・ベースのリソース・バンドル用の"java.class"と、プロパティ・ベースのリソース・バンドル用の"java.properties"です。 "java."で始まる文字列は、将来の拡張用として予約されているため、アプリケーション定義形式では使用しないでください。

      不変の(変更不可能な) Listを返す必要は、必ずしもありません。 ただし、ListgetFormatsによって返されたあとで、それを変更してはいけません。

      デフォルト実装はFORMAT_DEFAULTを返しますが、これは、ResourceBundle.getBundleファクトリ・メソッドがまずクラス・ベースのリソース・バンドルを検索し、次にプロパティ・ベースのバンドルを検索するようにするためです。

      パラメータ:
      baseName - リソース・バンドルの基底名。完全指定クラス名
      戻り値:
      リソース・バンドルをロードするための形式が格納された、StringList
      例外:
      NullPointerException - baseNameがnullである場合
      関連項目:
    • getCandidateLocales

      public List<Locale> getCandidateLocales(String baseName, Locale locale)
      baseNamelocaleの候補ロケールとして、LocaleListを返します。 このメソッドは、ターゲットLocaleのリソース・バンドルの検索をResourceBundle.getBundleファクトリ・メソッドが試みるたびに、そのファクトリ・メソッドによって呼び出されます。

      候補ロケールに対応するリソース・バンドルが存在しており、それらのロード済みリソース・バンドル自体には親が定義されていない場合、候補ロケールのシーケンスは、実行時リソース検索パス(親連鎖とも呼ばれる)にも対応します。 基底バンドルを親連鎖の終端にする必要がある場合、このリストの最後の要素はルート・ロケールでなければいけません。

      指定されたロケールがLocale.ROOT (ルート・ロケール)に等しい場合、ルートのLocaleだけを含むListが返される必要があります。 この場合、ResourceBundle.getBundleファクトリ・メソッドは、結果として得られるリソース・バンドルとして基底バンドルだけをロードします。

      不変の(変更不可能な) Listを返す必要は、必ずしもありません。 ただし、ListgetCandidateLocalesによって返されたあとで、それを変更してはいけません。

      デフォルト実装は、後述のルールを使用して、Localeを含むListを返します。 下記の説明で、LSC、およびVはそれぞれ、空でない言語、スクリプト、国、およびバリアントを表します。 たとえば、[L, C]は、言語と国だけに空でない値を持つLocaleを表します。 L("xx")という形式は、(空でない)言語の値が"xx"であることを表します。 どの場合でも、最終コンポーネントの値として空の文字列を持つLocaleは省略されます。

      1. 入力Localeのスクリプトの値が空の場合は、次のように最終コンポーネントを1つずつ省略して候補Localeを追加します。
        • [L, C, V]
        • [L, C]
        • [L]
        • Locale.ROOT
      2. 入力Localeのスクリプトの値が空でない場合は、最終コンポーネントを言語まで省略して候補Localeを追加したあと、元の国とバリアントを使用してLocaleから生成した候補を追加します。
        • [L, S, C, V]
        • [L, S, C]
        • [L, S]
        • [L, C, V]
        • [L, C]
        • [L]
        • Locale.ROOT
      3. 入力Localeが、バリアント値が下線で区切られた複数のサブタグで構成される場合は、バリアント・サブタグを1つずつ省略することで候補Localeを生成してから、元のリスト内でフル・バリアント値を持つすべての Localeオカレンスのあとにそれらを挿入します。 たとえば、バリアントが2つのサブ・タグV1V2で構成されているとします:
        • [L, S, C, V1, V2]
        • [L, S, C, V1]
        • [L, S, C]
        • [L, S]
        • [L, C, V1, V2]
        • [L, C, V1]
        • [L, C]
        • [L]
        • Locale.ROOT
      4. 中国語には特例があります。 入力Localeロケールの言語が「zh」(中国語)で、スクリプトの値が空の場合は、国に応じて「Hans」(簡体字)または「Hant」(繁体字)が指定されます。 国が「CN」(中国)または「SG」(シンガポール)の場合は、「Hans」が指定されます。 国が「HK」(香港特別行政区、中国)、「MO」(マカオ特別行政区、中国)、または「TW」(台湾)の場合は、「Hant」が指定されます。 その他の国では、国が空の場合、スクリプトは指定されません。 たとえば、Locale("zh", "CN") の場合、候補リストは次のようになります。
        • [L("zh"), S("Hans"), C("CN")]
        • [L("zh"), S("Hans")]
        • [L("zh"), C("CN")]
        • [L("zh")]
        • Locale.ROOT
        Locale("zh", "TW")の場合、候補リストは次のようになります。
        • [L("zh"), S("Hant"), C("TW")]
        • [L("zh"), S("Hant")]
        • [L("zh"), C("TW")]
        • [L("zh")]
        • Locale.ROOT
      5. ノルウェー語には特例があります。 Locale("no", "NO", "NY")Locale("nn", "NO")はどちらもノルウェー語ニーノシクを表します。 ロケールの言語が「nn」の場合、標準の候補リストは[L("nn")]まで生成されたあと、次の候補が追加されます。
        • [L("no"), C("NO"), V("NY")]
        • [L("no"), C("NO")]
        • [L("no")]
        • Locale.ROOT
        ロケールが正確にLocale("no", "NO", "NY")の場合は、まずLocale("nn", "NO")に変換されたあと、上記の処理が行われます。

        また、Javaは言語「no」をノルウェー語ブークモール「nb」の同義語として扱います。 このLocale("no", "NO", "NY") (上記のように処理される)以外は、入力Localeの言語が「no」または「nb」の場合、言語コード「no」と「nb」を持つ候補Localeが交互に追加されます。まず要求された言語、次にその同義語が使用されます。 たとえば、Locale("nb", "NO", "POSIX")では、次の候補リストが生成されます。

        • [L("nb"), C("NO"), V("POSIX")]
        • [L("no"), C("NO"), V("POSIX")]
        • [L("nb"), C("NO")]
        • [L("no"), C("NO")]
        • [L("nb")]
        • [L("no")]
        • Locale.ROOT
        Locale("no", "NO", "POSIX")でも同じリストが生成されますが、「no」を持つロケールが「nb」を持つロケールより前に出現する点が異なります。

      デフォルト実装はArrayListを使用しますが、これは、オーバーライドした実装内で、呼出し元に返す前に変更することができます。 ただし、getCandidateLocalesから返されたあとでサブクラス内で変更してはいけません。

      たとえば、指定されたbaseNameが「Messages」であり、指定されたlocaleLocale("ja", "", "XX")であった場合、LocaleList:

           Locale("ja", "", "XX")
           Locale("ja")
           Locale.ROOT
       
      が返されます。 そして、「ja」と「」のLocaleに対するリソース・バンドルが見つかった場合、実行時リソース検索パス(親連鎖)は次のようになります。
      
           Messages_ja -> Messages
       

      パラメータ:
      baseName - リソース・バンドルの基底名。完全指定クラス名
      locale - リソース・バンドルが必要なロケール
      戻り値:
      指定されたlocaleに対する候補LocaleList
      例外:
      NullPointerException - baseNameまたはlocalenullである場合
    • getFallbackLocale

      public Locale getFallbackLocale(String baseName, Locale locale)
      ResourceBundle.getBundleファクトリ・メソッドがリソース・バンドルをさらに検索する際のフォール・バック・ロケールとして使用されるLocaleを返します。 このメソッドは、baseNamelocaleに対応する結果リソース・バンドルが1つも見つからない状況が発生するたびに、ファクトリ・メソッドによって呼び出されます。ここで、そのロケールは、ResourceBundle.getBundleのパラメータ、このメソッドから以前に返されたフォール・バック・ロケールのいずれかになります。

      このメソッドは、さらなるフォール・バック検索が必要ない場合にnullを返します。

      デフォルト実装は、指定されたlocaleがデフォルトのロケールではない場合にデフォルトのLocaleを返します。 それ以外の場合はnullが返されます。

      パラメータ:
      baseName - リソース・バンドルの基底名。完全指定クラス名。ResourceBundle.getBundleはこの基底名に対して、基底バンドル以外のリソース・バンドルを1つも見つけられなかった
      locale - LocaleResourceBundle.getBundleはこのロケールに対して、基底バンドル以外のリソース・バンドルを1つも見つけられなかった
      戻り値:
      フォール・バック検索用のLocale。さらなるフォール・バック検索が必要ない場合はnull
      例外:
      NullPointerException - baseNameまたはlocalenullである場合
    • newBundle

      public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException
      指定された形式とロケールを持つ指定されたバンドル名のリソース・バンドルを、指定されたクラス・ローダーを必要に応じて使用してインスタンス化します。 指定されたパラメータに対応する使用可能なリソース・バンドルが存在しない場合、このメソッドはnullを返します。 予想外のエラーが発生したためにリソース・バンドルのインスタンス化が行えない場合には、単純にnullを返す代わりに、ErrorまたはExceptionをスローすることでエラーを報告する必要があります。

      reloadフラグがtrueの場合、それは、以前にロードされたリソース・バンドルの有効期限が切れたためにこのメソッドが呼び出されたことを示します。

      実装要件:
      名前付きモジュールのリソース・バンドルは、Module.getResourceAsStreamで指定されたカプセル化ルールの影響を受けます。 リソース・バンドルに対応するリソース・ファイルのパッケージが無条件に開かれている場合、指定されたクラス・ローダーが参照できる名前付きモジュールのリソース・バンドルにアクセスできます。

      デフォルト実装によるResourceBundleのインスタンス化手順は、次のとおりです。

      • toBundleName(baseName, locale)を呼び出すことでバンドル名が取得される。
      • format"java.class"の場合、バンドル名で指定されたClassには、指定されたクラス・ローダーがロードされます。 Classが見つけられ、アクセス可能であれば、ResourceBundleがインスタンス化されます。 リソース・バンドルは、バンドル・クラス・ファイルのパッケージが無条件に開いている場合にアクセス可能です。それ以外の場合は、IllegalAccessExceptionがスローされます。 なお、このデフォルト実装では、クラス・ベースのリソース・バンドルをロードする際にはreloadフラグが無視される。
      • format"java.properties"の場合、toResourceName(bundlename, "properties")を呼び出すことでリソース名が取得される。 reloadtrueの場合、load.getResourceを呼び出すことで、URLConnectionを作成するためのURLが取得される。 このURLConnectionを使って、基盤となるリソース・ロード処理層のキャッシュの無効化と、InputStreamの取得が行われる。 それ以外の場合は、loader.getResourceAsStreamを呼び出すことでInputStreamが取得される。 次に、そのInputStreamを使ってPropertyResourceBundleが構築される。
      • format"java.class"でも"java.properties"でもない場合は、IllegalArgumentExceptionがスローされる。
      • localeの言語が「レガシー言語コード」(古い言語または新しい言語)の1つである場合は、必要に応じてロード・プロセスを繰り返し、バンドル名と他の言語を使用します。 たとえば、"he"の場合は"iw"、その逆です。

      パラメータ:
      baseName - リソース・バンドルの基底バンドル名。完全指定クラス名
      locale - リソース・バンドルのインスタンス化対象となるロケール
      format - ロードされるリソース・バンドルの形式
      loader - バンドルをロードするために使用するClassLoader
      reload - バンドルの再ロードを示すフラグ。有効期限の切れたリソース・バンドルを再ロードする場合はtrue、それ以外の場合はfalse
      戻り値:
      リソース・バンドル・インスタンス。インスタンスが見つからなかった場合はnull
      例外:
      NullPointerException - bundleNamelocaleformat、またはloadernullの場合、またはtoBundleNameからnullが返された場合
      IllegalArgumentException - formatが不明である場合、または指定されたパラメータに対して見つかったリソースに不正なデータが含まれている場合。
      ClassCastException - ロードされたクラスをResourceBundleにキャストできない場合
      IllegalAccessException - クラスまたはその引数なしのコンストラクタにアクセスできない場合。
      InstantiationException -クラスのインスタンス化が何かほかの理由で失敗する場合。
      ExceptionInInitializerError - このメソッドによる初期化に失敗した場合。
      SecurityException - セキュリティ・マネージャが存在し、新しいインスタンスの作成が拒否された場合。 詳細は、Class.newInstance()を参照してください。
      IOException - 何らかの入出力操作を使ってリソースを読み取る際にエラーが発生した場合
      関連項目:
    • getTimeToLive

      public long getTimeToLive(String baseName, Locale locale)
      このResourceBundle.Controlの下でロードされるリソース・バンドルの有効期間(TTL)値を返します。 正の有効期間値は、バンドルがその構築元となるソース・データに基づいて検証されずにキャスト内にとどまることのできるミリ秒数を表します。 値0は、バンドルがキャッシュから取得されるたびに検証される必要があることを示します。 TTL_DONT_CACHEは、ロードされたリソース・バンドルがキャッシュに格納されないことを表します。 TTL_NO_EXPIRATION_CONTROLは、ロードされたリソース・バンドルが有効期限制御なしでキャッシュに格納されることを表します。

      この有効期限の影響を受けるのは、ResourceBundle.getBundleファクトリ・メソッドによるバンドル・ロード処理だけです。 つまり、ファクトリ・メソッドは、キャッシュ内で有効期限の切れたリソース・バンドルを検出すると、needsReloadメソッドを呼び出し、そのリソース・バンドルを再ロードする必要があるかどうかを判定します。 needsReloadtrueを返した場合、そのキャッシュ内のリソース・バンドル・インスタンスがキャッシュから削除されます。 それ以外の場合、そのインスタンスはキャッシュ内にとどまり、このメソッドから返された新しいTTL値で更新されます。

      キャッシュ内のリソース・バンドルはすべて、実行環境のメモリー制限による、キャッシュからの削除対象となります。 大きな正の値が返されても、それは、ロードされたリソース・バンドルがキャッシュ内でロックされることを意味するわけではありません。

      デフォルトの実装ではTTL_NO_EXPIRATION_CONTROLを返します。

      パラメータ:
      baseName - 有効期限値が指定されているリソース・バンドルの基底名。
      locale - 有効期限値が指定されているリソース・バンドルのロケール。
      戻り値:
      キャッシュ内のロード済みバンドルに有効期限を設ける場合はその時間(0またはキャッシュ格納時刻からの正のミリ秒オフセット)、有効期限制御を無効にする場合はTTL_NO_EXPIRATION_CONTROL、キャッシュを無効にする場合はTTL_DONT_CACHE
      例外:
      NullPointerException - baseNameまたはlocalenullである場合
    • needsReload

      public boolean needsReload(String baseName, Locale locale, String format, ClassLoader loader, ResourceBundle bundle, long loadTime)
      キャッシュ内で有効期限の切れたbundleを再ロードする必要があるかどうかを、loadTimeに指定されたロード時間やその他のいくつかの条件に基づいて判定します。 このメソッドは、再ロードが必要な場合はtrueを返し、それ以外の場合はfalseを返します。loadTimeは、Calendarエポックからのミリ秒オフセットです。

      ResourceBundle.getBundleファクトリ・メソッドの呼出しは、最初にリソース・バンドルをロードした呼出しで使用されるインスタンスではなく、現在の呼出しに使用されるResourceBundle.Controlインスタンスでこのメソッドを呼び出します。

      デフォルト実装は、リソース・バンドルのloadTimeと、そのソース・データが最後に変更された時刻とを比較します。 loadTime以降にソース・データが変更されたことが判明した場合には、trueが返されます。 それ以外の場合はfalseが返されます。 この実装は、指定されたformatがデフォルトの形式"java.class""java.properties"のいずれでもない場合、その形式がファイル接尾辞と同じ文字列であると仮定します。

      パラメータ:
      baseName - リソース・バンドルの基底バンドル名。完全指定クラス名
      locale - リソース・バンドルのインスタンス化対象となるロケール
      format - ロードされるリソース・バンドルの形式
      loader - バンドルをロードするために使用するClassLoader
      bundle - キャッシュ内で有効期限の切れたリソース・バンドル・インスタンス
      loadTime - bundleがロードされ、キャッシュ内に格納された時刻
      戻り値:
      有効期限の切れたバンドルを再ロードする必要がある場合はtrue、それ以外の場合はfalse
      例外:
      NullPointerException - baseNamelocaleformatloader、またはbundlenullの場合
    • toBundleName

      public String toBundleName(String baseName, Locale locale)
      指定されたbaseNamelocaleをバンドル名に変換します。 このメソッドは、newBundleおよびneedsReloadメソッドのデフォルト実装から呼び出されます。

      この実装は次の値を返します。

           baseName + "_" + language + "_" + script + "_" + country + "_" + variant
       
      ここで、languagescriptcountry、およびvariantはそれぞれ、localeの言語、スクリプト、国、およびバリアントの値です。 最後の要素の値が空のStringである場合、その値と直前の「_」は省略されます。 スクリプトが空の場合、スクリプト値は直前の「_」と一緒に省略されます。 すべての値が空の文字列である場合には、baseNameが返されます。

      たとえば、baseName"baseName"localeLocale("ja", "", "XX")の場合は、"baseName_ja_ _XX"が返されます。 指定されたロケールがLocale("en")の場合は、"baseName_en"が返されます。

      このメソッドをオーバーライドすれば、ローカライズ済みリソースの構成やパッケージ化に関する異なる規約をアプリケーションで使用できます。

      パラメータ:
      baseName - リソース・バンドルの基底名。完全指定クラス名
      locale - リソース・バンドルのロード対象となるロケール
      戻り値:
      リソース・バンドルのバンドル名
      例外:
      NullPointerException - baseNameまたはlocalenullである場合
      関連項目:
    • toResourceName

      public final String toResourceName(String bundleName, String suffix)
      指定されたbundleNameClassLoader.getResourceメソッドで必要とされる形式に変換するため、bundleName内のすべての'.''/'に置き換え、末尾に1つの'.'と指定されたファイルsuffixを追加します。 たとえば、bundleName"foo.bar.MyResources_ja_JP"suffix"properties"の場合は、"foo/bar/MyResources_ja_JP.properties"が返されます。
      パラメータ:
      bundleName - バンドル名
      suffix - ファイル・タイプ接尾辞
      戻り値:
      変換後のリソース名
      例外:
      NullPointerException - bundleNameまたはsuffixnullである場合