|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectshohaku.core.util.XResourceBundle
shohaku.configutils.AbstractXMLResourceBundle
shohaku.configutils.XMLLocaleResourceBundle
public class XMLLocaleResourceBundle
XMLで定義されたプロパティを用いたロケールで階層化するリソースバンドルを提供します。
XMLリソースバンドルの特徴
XMLリソースバンドルには、ロケール固有のオブジェクトが含まれます。 プログラムでString
などのロケール固有のリソースが必要なときは、
ユーザのロケールに合ったXMLリソースバンドルからロードできます。 このように、XMLリソースバンドルから、ロケール固有の情報のすべてでなくてもその大部分を切り離すことで、
ユーザのロケールにはほとんど依存しないプログラムコードを書くことができます。
この特徴は java.util.ResourceBundle と同様のものであり、XMLリソースバンドルの設計はjava.util.ResourceBundle
の国際化モデルを継承しています。
大きな相違点はjava.util.ResourceBundle
がjava.util.Properties
を内部的に使用するのに対し、XMLリソースバンドルは
shohaku.configutils.XMLProperties
をデータモデルに使用している点です。
java.util.ResourceBundle
と同等の柔軟性と、より複雑なデータ型と複雑な階層データモデルを利用して情報を外部ファイル化する事が出来ます。 shohaku.configutils.XMLProperties
を使用するため、解析ルールを独自にカスタマイズすることが出来ます。
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.configutils.AbstractXMLResourceBundle から継承されたメソッド |
---|
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.configutils.ConfigurationResources から継承されたメソッド |
---|
containsKey, containsKey, getObject, getObject, keyIterator |
メソッドの詳細 |
---|
public java.util.Locale getLocale()
public static XMLLocaleResourceBundle getBundle(java.lang.String baseName)
baseName
- 基底名
java.util.MissingResourceException
- 指定された基底名のリソースバンドルが見つからない場合public static XMLLocaleResourceBundle getBundle(java.lang.String baseName, java.lang.ClassLoader loader)
baseName
- 基底名loader
- リソースのロード元のクラスローダ
java.util.MissingResourceException
- 指定された基底名のリソースバンドルが見つからない場合public static XMLLocaleResourceBundle getBundle(java.lang.String baseName, java.util.Locale locale)
baseName
- 基底名locale
- ロケール
java.util.MissingResourceException
- 指定された基底名のリソースバンドルが見つからない場合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
は実際の拡張リソースバンドルを「インスタンス化」できる最初の名前を見つけるために、
候補のバンドル名を繰り返し処理します。各候補バンドル名ごとに、拡張リソースバンドルを次のように作成しようとします。
ClassLoader.getResource
を使用して、この名前の「リソース」を見つけようとします (getResource
の「リソース」とは、拡張リソースバンドルのコンテンツとは無関係であり、ファイルなどのデータのコンテナにすぎません)。 XResourceBundle
インスタンスを作成します。
拡張リソースバンドルが見つからない場合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
- 指定された基底名のリソースバンドルが見つからない場合
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |