国際化手順

トップ > チップス > 国際化手順
2012-02-13, i18n

/tips/java/i18n *アプリケーションの国際化 国際化(internationalization->i18n)とは、アプリケーション内にリテラルとして記述された文字列を外部プロパティから読み込める形式に変換する作業です(それによってプロパティファイルの追加のみで別言語に差し替えが効きます)。

**クラス定数を利用する方法 以下のファイルを国際化するために必要な手順を列挙します。 Foo.java(before) :package info.lumber_mill.foobar; : :public class Foo\{ : public void bar()\{ : System.out.println("キーワード"); : \} :\}

まずは国際化リソースをまとめるクラス(I18N.java)を作成します。 I18N.java :public final class I18N\{ : private static final String BUNDLE_NAME : = "info.lumber_mill.foobar.i18n"; : private static final ResourceBundle BUNDLE : = ResourceBundle.getBundle(BUNDLE_NAME); : : public static final String KEYWORD; : : static\{ : KEYWORD = getString(BUNDLE,"keyword"); : \} :\}

次に、キーワードと値の列挙されたプロパティファイルを生成します。 i18n.properties :keyword=キーワード

最後に、I18Nのキーワードでリテラルを置き換えて完成! Foo.java(after) :package info.lumber_mill.foobar; : :public class Foo\{ : public void bar()\{ : System.out.println(I18N.KEYWORD); : \} :\}

**ListResourceBundleを使用する方法 この方法の利点は、プロパティファイルのUTFエスケープを考慮しなくて良い点でしょう。クラス中に必要なリソースを全て記述します。また、(シグニチャの通り)String以外のオブジェクトも指定することが可能です。

まず、以下のようにListResourceBundleを拡張したクラスを定義します。その他の言語を追加する場合、「I18n_en」のようにクラス名の後ろにロケールの指定を追加したクラスを作成します。 :public final class I18n extends ListResourceBundle { : private final static Object[][] contents = { : { "hello1", "こんにちは1" }, : { "hello2", "こんにちは2" } }; : : @Override : protected Object[][] getContents() { : return contents; : } :}

上記のクラスが「foo.bar」というパッケージに収められている場合、以下のようにリソースバンドルを呼び出します。 :ResourceBundle rb = ResourceBundle.getBundle("foo.bar.I18n"); :System.out.println("hello1="+rb.getString("hello1")); :System.out.println("hello2="+rb.getString("hello2"));

デフォルトのロケール以外の言語を試したい場合、以下のようにjavaの起動時にオプションを追加するとよいでしょう。 :-Duser.lauguage=ja

この記事は役に立ちましたか?