リソースファイルの国際化対応 - java.util.ResourceBundle

2009/01/24 22:43Update
TAGS: java | properties | プロパティファイル | 国際化 | ローカライゼーション | ローカライズ

本文はJava言語でリソースファイルの国際化対応を行うためのjava.util.ResourceBundleクラスを紹介します。

リソースの国際化とは


リソースの国際化とは、ユーザの環境に合わせた言語の表示ができるような仕組みです。例えば、国際化を対応しているWebサイトでは、日本のユーザの場合、日本語を表示しますが、アメリカやイギリスの訪問者であれば、英語を表示します。

つまり、国際化されたアプリケーションでは、
1)ユーザが優先/指定する言語を表示できるような仕組みを提供します。
2)アプリケーション内に複数言語を表示するために各言語版のリソースを提供します。3)言語を簡単に追加できるようにします。

Java言語では、java.util.ResourceBundleというクラスを提供し、上の2)や3)を解決します。

java.util.ResourceBundleは、プロパティファイルを使用してそのリソースを管理することができます。

プロパティファイルについて、次の記事をご参照ください。
Javaでpropertiesファイルの読み書き処理

Javaでリソースの国際化


以下はリソースの国際化 一般的な手順について説明します。
1)各言語版のリソース(プロパティファイル)の用意
例えば、アプリケーションに日本語や英語版を提供する場合、アプリケーションのラベルやボタン、メニューなどに使われた文字の「日本語」と「英語」版のプロパティファイルを用意する必要があります。

例:
英語版のリソース
Application.properties
menu.file = File
menu.edit = Edit


日本語版のリソース
Application_ja.properties
menu.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);
    }
}

.

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation