shohaku.kosho
クラス XMLLocaleResourceBundle

java.lang.Object
  拡張shohaku.core.util.XResourceBundle
      拡張shohaku.kosho.AbstractGinkgoResourceBundle
          拡張shohaku.kosho.XMLLocaleResourceBundle
すべての実装インタフェース:
KoshoResources

public class XMLLocaleResourceBundle
extends AbstractGinkgoResourceBundle

XMLで定義されたプロパティを用いたロケールで階層化するリソースバンドルを提供します。

XMLリソースバンドルの特徴

XMLリソースバンドルには、ロケール固有のオブジェクトが含まれます。 プログラムでStringなどのロケール固有のリソースが必要なときは、 ユーザのロケールに合ったXMLリソースバンドルからロードできます。 このように、XMLリソースバンドルから、ロケール固有の情報のすべてでなくてもその大部分を切り離すことで、 ユーザのロケールにはほとんど依存しないプログラムコードを書くことができます。

これにより、以下の特徴を持つプログラムを書くことが可能になります。

この特徴は java.util.ResourceBundle と同様のものであり、XMLリソースバンドルの設計はjava.util.ResourceBundleの国際化モデルを継承しています。 大きな相違点はjava.util.ResourceBundlejava.util.Propertiesを内部的に使用するのに対し、XMLリソースバンドルは shohaku.kosho.XMLPropertiesをデータモデルに使用している点です。

この機能によりjava.util.ResourceBundleと同等の柔軟性と、より複雑なデータ型と複雑な階層データモデルを利用して情報を外部ファイル化する事が出来ます。
XMLリソースバンドルは内部的にshohaku.kosho.XMLPropertiesを使用するため、解析ルールを独自にカスタマイズすることが出来ます。
解析ルールの指定に関しては後記の「XMLリソースバンドル固有の名前規約」で説明します。

XMLリソースバンドルの基底名と各ロケールをファミリとして定義する名前規約に関してはjava.util.ResourceBundleを参照してください。

XMLリソースバンドル固有の名前規約

XMLリソースバンドルには唯一java.util.ResourceBundleとは別の名前規約が有ります。
XMLリソースバンドルでは基底名を基にして複数のファイルが読取の対象となるため、同一の基底名に属すファイルは同一の解析ルールが摘要される必要があります。
よって基底名単位で解析ルールを指定する為の以下の配置規約が定義されています。

上記位置に配置しておけばシステムが自動で読み取ります, 配置されていなければデフォルトが使用されます。

XMLリソースバンドル固有の問題

XMLリソースバンドルは複数のデータ型に対応する一方でjava.util.ResourceBundleと同様に、 上位階層から値が継承されるモデルを採用しているため、上位階層で定義される型とは別の型を下位の階層が定義する可能性が有ります。
この特徴はデータ型の管理を難しくする可能性があります。 この特徴を踏まえて設計および管理を行うことが推奨されます。
DTDファイルを作成して検証を行う、使用する解析ルールの型制約を厳しくする、ドキュメントレベルで厳密に規定する等、何らかの補助を設ける事で回避することが出来ると考えます。


フィールドの概要
 
クラス shohaku.core.util.XResourceBundle から継承したフィールド
bundleBase, lookupKeys, lookupMap, parent
 
メソッドの概要
static XMLLocaleResourceBundle getBundle(java.lang.String baseName)
          指定された基底名、デフォルトのロケール、および呼び出し側のクラスローダを使用して、リソースバンドルを取得します。
static XMLLocaleResourceBundle getBundle(java.lang.String baseName, java.lang.ClassLoader loader)
          指定された基底名、クラスローダ、およびデフォルトのロケールを使用して、リソースバンドルを取得します。
static XMLLocaleResourceBundle getBundle(java.lang.String baseName, java.util.Locale locale)
          指定された基底名、ロケール、および呼び出し側のクラスローダを使用して、リソースバンドルを取得します。
static XMLLocaleResourceBundle getBundle(java.lang.String baseName, java.util.Locale locale, java.lang.ClassLoader loader)
          指定された基底名、ロケール、クラスローダを使用して、拡張リソースバンドルを取得します。
 java.util.Locale getLocale()
          ロケールを取得して返却します。
 
クラス shohaku.kosho.AbstractGinkgoResourceBundle から継承したメソッド
getDocument
 
クラス shohaku.core.util.XResourceBundle から継承したメソッド
containsKey, containsKey, getBundleBase, getObject, getObject, keyIterator
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
インタフェース shohaku.kosho.KoshoResources から継承したメソッド
containsKey, containsKey, getObject, getObject, keyIterator
 

メソッドの詳細

getLocale

public java.util.Locale getLocale()
ロケールを取得して返却します。

戻り値:
ロケール

getBundle

public static XMLLocaleResourceBundle getBundle(java.lang.String baseName)
指定された基底名、デフォルトのロケール、および呼び出し側のクラスローダを使用して、リソースバンドルを取得します。
このメソッドを呼び出すことは、以下を呼び出すことと同じです。
getBundle(baseName, Locale.getDefault(), XMLLocaleResourceBundle.class.getClassLoader())
検索とインスタンス生成方法の詳細については、getBundle を参照してください。

パラメータ:
baseName - 基底名
戻り値:
指定された基底名とデフォルトのロケールの拡張リソースバンドル
例外:
java.util.MissingResourceException - 指定された基底名のリソースバンドルが見つからない場合

getBundle

public static XMLLocaleResourceBundle getBundle(java.lang.String baseName,
                                                java.lang.ClassLoader loader)
指定された基底名、クラスローダ、およびデフォルトのロケールを使用して、リソースバンドルを取得します。
このメソッドを呼び出すことは、以下を呼び出すことと同じです。
getBundle(baseName, Locale.getDefault(), loader)
検索とインスタンス生成方法の詳細については、getBundle を参照してください。

パラメータ:
baseName - 基底名
loader - リソースのロード元のクラスローダ
戻り値:
指定された基底名とロケールの拡張リソースバンドル
例外:
java.util.MissingResourceException - 指定された基底名のリソースバンドルが見つからない場合

getBundle

public static XMLLocaleResourceBundle getBundle(java.lang.String baseName,
                                                java.util.Locale locale)
指定された基底名、ロケール、および呼び出し側のクラスローダを使用して、リソースバンドルを取得します。
このメソッドを呼び出すことは、以下を呼び出すことと同じです。
getBundle(baseName, locale, XMLLocaleResourceBundle.class.getClassLoader())
検索とインスタンス生成方法の詳細については、getBundle を参照してください。

パラメータ:
baseName - 基底名
locale - ロケール
戻り値:
指定された基底名とロケールの拡張リソースバンドル
例外:
java.util.MissingResourceException - 指定された基底名のリソースバンドルが見つからない場合

getBundle

public static XMLLocaleResourceBundle getBundle(java.lang.String baseName,
                                                java.util.Locale locale,
                                                java.lang.ClassLoader loader)
指定された基底名、ロケール、クラスローダを使用して、拡張リソースバンドルを取得します。

理論的にはgetBundleでは次の方法を使用して、拡張リソースバンドルの検出および生成を行います。

getBundleは、基底名、指定されたロケール、およびデフォルトのロケール (Locale.getDefault から取得したロケール) を使用して、 候補のバンドル名のシーケンスを生成します。
指定されたロケールの言語、国、およびバリアントがすべて空の文字列の場合、基底名は候補のバンドル名のみになります。
それ以外の場合には、指定したロケール (language1、country1、variant1) およびデフォルトのロケール (language2、country2、variant2) の属性値から、次のシーケンスが生成されます。

最終コンポーネントが空の文字列の場合、候補のバンドル名は省略されます。
たとえば、country1 が空の文字列の場合、2 番目の候補のバンドル名は省略されます。

getBundleは実際の拡張リソースバンドルを「インスタンス化」できる最初の名前を見つけるために、 候補のバンドル名を繰り返し処理します。各候補バンドル名ごとに、拡張リソースバンドルを次のように作成しようとします。

拡張リソースバンドルが見つからない場合MissingResourceExceptionがスローされます。

拡張リソースバンドルが見つかったときは、その親連鎖をインスタンス化します。
getBundleは候補のバンドル名を繰り返し処理します。
このバンドル名は、拡張リソースバンドルのバンドル名からバリアント、国、および言語を (前に「_」についたものに関して毎回) 連続して削除することによって、取得します。
上述のように、最終コンポーネントが空の文字列である場合、候補のバンドル名は省略されます。
各候補のバンドル名により、上述のように、拡張リソースバンドルをインスタンス化しようとします。
インスタンスに成功した場合は常に、前にインスタント化した拡張リソースバンドルに null 以外の親拡張リソースバンドルがない場合は
前にインスタンス化した拡張リソースバンドルの setParent メソッドを新しい拡張リソースバンドルにより呼び出します。

getBundleの実装はインスタンス化した拡張リソースバンドルをキャッシュし、同じ拡張リソースバンドルのインスタンスを複数回返却します。
こうした実装では、拡張リソースバンドルおよびその親連鎖の選択が上述のものと互換性がある限り、拡張リソースバンドルをインスタンス化するシーケンスを変更する場合もあります。

baseName引数は完全指定のクラス名である必要があります。

例: XMLプロパティファイル、MyResources.xml、MyResources_fr_CH.xml、MyResources_fr.xml、MyResources_en.xml、が提供されています。
すべてのファイルのコンテンツが有効です。 デフォルトのロケールはLocale("en", "UK")です。

表示されたロケール引数値を持つgetBundleの呼び出しは、次のソースから拡張リソースバンドルをインスタンス化します。

パラメータ:
baseName - 基底名
locale - ロケール
loader - リソースのロード元のクラスローダ
戻り値:
指定された基底名とロケールの拡張リソースバンドル
例外:
java.util.MissingResourceException - 指定された基底名のリソースバンドルが見つからない場合