JavaでResourceBundleの詳細な使い方

ResourceBundleはJavaでローカライズリソースを読み込むクラスで、ロケールごとに異なるリソースファイルを読み込み、ユーザのロケールに応じた文字やアイコンなどの表示を可能にする。

ResourceBundleからリソースファイルを読み込む手順は以下のとおりです。

  1. プロパティファイルを用意します。プロパティファイルとは.propertiesを拡張子とするテキストファイルで、キーと値で書かれた設定情報が書かれています。プロパティファイルは言語ごとに作成します。ファイル名は「baseName_locale.properties」という形式です。「baseName」はプロパティファイルの基本名称、「locale」は言語環境を示すロケール指定です。例えば「en_US」はアメリカ英語を日本語です。ロケール指定のないプロパティファイル「baseName.properties」を用意することもできます。
  2. ResourceBundleオブジェクトの生成: ResourceBundleクラスのgetBundle()静的メソッドを使用してResourceBundleオブジェクトを生成できます。getBundle()メソッドには複数のオーバーロードがあり、最も一般的に使用されるのはgetBundle(String baseName)とgetBundle(String baseName, Locale locale)です。前者はデフォルトのロケールを使用してリソースファイルをロードし、後者は指定されたロケールに基づいてリソースファイルをロードします。
  3. ResourceBundleオブジェクトを使用して、getString()やgetObjectなどのメソッドによって、リソースファイルの値を取得することができます。getString()メソッドは文字列型の値を取得するために使用し、getObject()メソッドはさまざまな型の値を取得するために使用します。

下記にサンプルコードを示します。

import java.util.Locale;
import java.util.ResourceBundle;
public class ResourceBundleExample {
public static void main(String[] args) {
// 创建ResourceBundle对象,默认使用默认的语言环境加载资源文件
ResourceBundle bundle = ResourceBundle.getBundle("messages");
// 获取资源文件中的值
String hello = bundle.getString("hello");
System.out.println(hello);
// 创建指定语言环境的ResourceBundle对象
Locale locale = new Locale("en", "US");
ResourceBundle bundleEn = ResourceBundle.getBundle("messages", locale);
// 获取指定语言环境的资源文件中的值
String helloEn = bundleEn.getString("hello");
System.out.println(helloEn);
}
}

このコードでは、messages.propertiesとmessages_en_US.propertiesという2つのリソースファイルがあると想定されています。messages.propertiesの中身は次のとおりです。

hello=你好

messages_en_US.propertiesの中身は以下の通りです:

hello=Hello

最初のResourceBundleオブジェクトでは、デフォルトロケールでリソースファイルがロードされているため、取得される値は「こんにちは」です。2番目のResourceBundleオブジェクトでは、en_USというロケールが指定されているため、取得される値は「Hello」になっています。

指定されたロケールのリソースファイルが存在しない場合、ResourceBundleはデフォルトのリソースファイルの読み込みを試みます。デフォルトのリソースファイルも存在しない場合、ResourceBundleはMissingResourceException例外を送出します。

bannerAds