リソースファイルの国際化対応 - java.util.ResourceBundle
2009/01/24 22:43Update
本文はJava言語でリソースファイルの国際化対応を行うためのjava.util.ResourceBundleクラスを紹介します。
リソースの国際化とは
リソースの国際化とは、ユーザの環境に合わせた言語の表示ができるような仕組みです。例えば、国際化を対応しているWebサイトでは、日本のユーザの場合、日本語を表示しますが、アメリカやイギリスの訪問者であれば、英語を表示します。
つまり、国際化されたアプリケーションでは、
1)ユーザが優先/指定する言語を表示できるような仕組みを提供します。
2)アプリケーション内に複数言語を表示するために各言語版のリソースを提供します。3)言語を簡単に追加できるようにします。
Java言語では、java.util.ResourceBundleというクラスを提供し、上の2)や3)を解決します。
java.util.ResourceBundleは、プロパティファイルを使用してそのリソースを管理することができます。
プロパティファイルについて、次の記事をご参照ください。
Javaでpropertiesファイルの読み書き処理
Javaでリソースの国際化
以下はリソースの国際化 一般的な手順について説明します。
1)各言語版のリソース(プロパティファイル)の用意
例えば、アプリケーションに日本語や英語版を提供する場合、アプリケーションのラベルやボタン、メニューなどに使われた文字の「日本語」と「英語」版のプロパティファイルを用意する必要があります。
例:
英語版のリソース
Application.propertiesmenu.file = File menu.edit = Edit
日本語版のリソース
Application_ja.propertiesmenu.file = ファイル menu.edit = 編集
2)ResourceBundleでリソースを動的に取得
ResourceBundleは、getBundleというメソッドでリソースバンドルを取得します。
ResourceBundle#getBundle(String baseName) ResourceBundle#getBundle(String baseName, Locale locale)
baseName - リソースバンドルの基底名。完全指定クラス名
例:
ResourceBundle resource = ResourceBundle.getBundle("Application");
※ルートパスにあるApplication.propertiesというリソースを取得します。
ResourceBundle resource = ResourceBundle.getBundle("com.test.Application");
※com/testにあるApplication.propertiesというリソースを取得します。
ResourceBundle resource = ResourceBundle.getBundle("com.test.Application", Locale.JAPANESE);
※com/testにあるApplication_ja.propertiesというリソースを取得します。
※Locale.JAPANESEは日本のロケールです。上の場合、ResourceBundleは自動的にApplication_ja.propertiesを取得します。
日本の場合、Locale.JAPANESE(ja)のほか、Locale.JAPAN(ja_JP)というロケールはあります。
3)リソースから指定されたキーの文字列を取得
指定されたキーの文字列を取得するには、ResourceBundleはgetStringメソッドを利用します。
ResourceBundle#getString(String key)
また、文字列配列として取得する方法もあります。
ResourceBundle#getStringArray(String key)
■サンプル
package com.test;
import java.util.Enumeration;
import java.util.Locale;
import java.util.ResourceBundle;
public class TestProperties {
public static void main(String []args) {
//com.test.*というパッケージのクラス(TestProperties.class)ファイルと同じディレクトリに配置してください
String resourceFile = "com.test.Application";
System.out.println("---英語 Locale---");
//Application.properties
ResourceBundle resource = ResourceBundle.getBundle(resourceFile);
testResourceBundle(resource);
System.out.println("---日本語 Locale.JAPANESE---");
//Application_ja.properties
resource = ResourceBundle.getBundle(resourceFile, Locale.JAPANESE);
testResourceBundle(resource);
}
private static void testResourceBundle(ResourceBundle resource) {
String menuFile = resource.getString("menu.file");
System.out.println("menu.file" + menuFile);
String menuEdit = resource.getString("menu.edit");
System.out.println("menu.edit" + menuEdit);
}
}
.
Sponsored Link
Comments
- Relative Articles
- Java開発及び実行環境の構築 | Linux篇 - (2008/08/31 20:34)
- Java開発及び実行環境の構築 | Windows篇 - (2008/08/31 21:18)
- 5分でJava Hello World! - (2008/08/31 22:13)
- Java言語の制御構文 - 条件分岐if/else/else if - (2008/10/01 21:30)
- Java言語の繰り返し制御構文 - for文 - (2008/10/03 18:22)
- Java言語の繰り返し制御構文 - do ... while文 - (2008/10/03 21:23)
- Java言語の繰り返し制御構文 - while文 - (2008/10/03 21:32)
- Java言語の基礎 - javacコマンドによるコンパイル - (2008/10/10 17:58)
- Java アクセス修飾子概要 - (2008/10/29 18:31)
- Javaアノテーション機能 概要 - (2009/02/12 13:06)