目次へ

6.3. リソースバンドル

リソースバンドルとは、ロケール固有のオブジェクトを管理するクラスです。例えば日本語圏では日本語用のリソースバンドル、フランス語圏ではフランス語用のリソースバンドルを呼び出す事により、アプリケーションをそれぞれの言語圏に対応させる事ができます。リソースバンドルは「java.util.ResourceBundle」クラスのサブクラスを用いて作成します。ここでは「java.util.PropertyResourceBundle」を用いる方法について説明します。

PropertyResourceBundleではプロパティファイルを利用してリソースを管理します。文字列しか管理できませんが、使い勝手が良いので通常はこのクラスを用いてリソースバンドルを作成します。PropertyResourceBundleを作成する場合には、クラスファイルではなくプロパティファイルを作成します。前節「プロパティ」のファイルフォーマットと同じフォーマット形式でファイルを作成します。ただしファイル名に決まりがあり、以下の形式に従います。

  • 拡張子は必ず「.properties」
  • リソースバンドルの検索の際に使用する基底名の後ろに「_」の後、ロケールの内部コードを続けます。例えば日本語の場合、ロケールの内部コードは「ja_JP」ですので、
(基底名)_ja_JP

となります。この後ろに拡張子をつけます。

リソースバンドルの検索には、ResourceBundleの「getBundle」メソッドを使用します。第1引数で基底名、第2引数でロケールを指定します。第2引数を省略した場合には、デフォルトロケールが使用されます。以下の例では、「sample」という基底名で、Locale.JAPANに対応するリソースバンドルが検索されます。見つからなかった場合には、「java.util.MissingResourceException」がスローされます。

ResourceBundle.getBundle("sample", Locale.JAPAN);

さてどこからリソースバンドルがどのように検索されるのでしょうか。リソースバンドルはクラスパスから検索されます。第1引数で指定される基底名は基底クラス名でもあり、リソースバンドルを提供するクラスを意味します。PropertyResourceBundleでリソースバンドルを提供する場合には、拡張子「.properties」を除いた部分をクラス名とみなします。サンプルの場合は以下の順で検索します。

  1. 「(基底名)_ja_JP」というクラスを探す
  2. 無ければ、「(基底名)_ja」というクラスを探す
  3. 無ければ、「(基底名)」というクラスを探す
  4. それも無ければ、MissingResourceExceptionをスローする

「sample.SampleResource」と基底名を指定した場合にはどうなるのでしょうか。この場合にはsampleパッケージのSampleResourceというクラスを探します。PropertyResourceBundleで提供する場合には、sampleパッケージのあるディレクトリに、プロパティファイルを置かなければなりません。

(実習課題3)

以下のアプリケーションを作成しなさい。

  • プログラムの実行時引数でロケールを指定する。
  • 指定したロケールでリソースバンドルを検索し、「hello」に対応する値を表示する事。当然のことながら、その値は「hello」をその言語に翻訳したものにする事。
  • 少なくとも3種類以上のロケールに対応したリソースバンドルを作成する事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp