便利なコードパーツ集!

やまろうのプログラミングTips

Java

[Java] Localeを使ってメッセージを国際化

投稿日:

2004/02

Java APIリファレンスとか読んでると時々出てくる"Locale"って単語なんやねん?と
思ったことありませんか?なんとなく、国とか地域とかの意味なんだろうなーと
いうイメージはあるんだけど、実際どうつかうのかねぇ?ということで
今回はLocaleを使ってResourceBundleを切り替えてみたいと思います。

まずは、propertiesファイルを作成、
日本語、英語、フランス語の3種類を用意します。
[msg_ja.properties] 日本語用

aisatsu=\u3053\u3093\u306b\u3061\u308f

"こんにちわ"をnative2asciiでUnicode化

[msg_en.properties] 英語用

aisatsu=Hello

[msg_fr.properties] フランス語用

aisatsu=Bon Voyage

んではプログラムー!!

package etc;

import java.util.ResourceBundle;
import java.util.Locale;

public class BundleAndLocaleSample {
  public static void main(String[] args) {
    //使えるロケールを表示
//    Locale[] locals = Locale.getAvailableLocales();
//    for (int i = 0; i < locals.length; i++) {
//      System.out.println(locals[i]);
//    }

    ResourceBundle defaultBundle = 
        ResourceBundle.getBundle("msg");
    String s = defaultBundle.getString("aisatsu");
    System.out.println("デフォルト語=" + s);

    ResourceBundle japanBundle = 
        ResourceBundle.getBundle("msg", Locale.JAPAN);
    s = japanBundle.getString("aisatsu");
    System.out.println("日本語=" + s);

    ResourceBundle franceBundle = 
        ResourceBundle.getBundle("msg", Locale.FRANCE);
    s = franceBundle.getString("aisatsu");
    System.out.println("フランス語=" + s);

    ResourceBundle englishBundle = 
        ResourceBundle.getBundle("msg", Locale.ENGLISH);
    s = englishBundle.getString("aisatsu");
    System.out.println("英語=" + s);
  }

}

[実行結果]

デフォルト語=こんにちわ
日本語=こんにちわ
フランス語=Bon Voyage
英語=Hello

つまり、
ResourceBundle.getBundle("msg", Locale.FRANCE);
って書くとmsg_fr.propertiesを読みに行く仕様のようですな!
ResourceBundle.getBundle(プロパティファイルの接頭辞, _XXのロケール);
ってわけ。

ResourceBundle.getBundle("msg");
って、Localeを指定しないとデフォルトのLocaleが日本だから
msg_jp.propertiesを読みにいったわけね。
ファイル名をmsg.propertiesにしても、読みにいきます。

ところで、Bon Voyageってこんにちわって意味なのかな?てきとーに
書いたもので、ガッハッハー!!!(風俗にいたバカ風)

あと、mainの冒頭でコメントアウトしてる部分のコメントはずすと
利用出来るLocaleが表示されます。ぜひ試してみてくださいな!

んじゃ
やまろう

スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2024 AllRights Reserved Powered by AFFINGER4.