国際化(i18n:他言語対応)の基本

まず文字列の外部化をし、言語ごとにプロパティファイルを作成し、Java のクラスパス直下に置きます。たとえば Eclipse の場合 src ディレクトリ、それ以外の場合 class ディレクトリなど。
 
filename.properties: (対応していない場合のデフォルト. 英語が望ましい)

message.greet = Hello!!
message.bye = Good bye.

 
filename_ja.properties:
  日本語ロケール ja_JP の時に利用されるプロパティ.
  マルチバイト文字を扱う場合 native2ascii でエンコードする必要があるため、参考欄で後述する Eclipse の PropertiesEditor プラグインを使うとよい.

message.greet = こんにちは!!
message.bye = さようなら。

 
filename_fr.properties:
  フランス語ロケール fr_FR の時に利用されるプロパティ.
  このように対応したい言語用のファイルを追加するだけで言語対応ができます.

message.greet = Salut!!
message.bye = Au revoir.

 
以下が国際化対応した外部文字列呼び出しと時刻整形の Java サンプルコードです。

import java.util.ResourceBundle; // 外部文字列取得用
import java.text.DateFormat; // 日付表示用
// その他 import 文省略
 
// 略
 
public void main(String[] args){
   // 実行環境のデフォルトのロケールのプロパティファイルを読み込む
   ResourceBundle bundle =
       ResourceBundle.getBundle(“filename”); // <filename>_<言語コード>.properties の <filename> を指定。
    
   // 現在のロケールの言語で挨拶
   System.out.println(bundle.getString(“message.greet”));
 
   // 現在のロケールで有効な書式で日付表示
   String sToday = DateFormat.getDateInstance().format(new Date());
   System.out.println(sToday);
    
   // 現在のロケールの言語で別れの挨拶
   System.out.println(bundle.getString(“message.bye”));
  
}

結果:

– ロケールが英語(en_USなど)の場合:
Hello!!
May 31, 2007
Good bye.
 
– 日本語(ja_JP)の場合:
こんにちは!!
2007/05/31
さようなら。
 
– フランス語(fr_FR)の場合:
Salut!!
31 mai 2007
Au revoir.

 

java.util.Locale.setDefault(Locale.ENGLISH);

のようにすることで、以降のコードのデフォルトロケールを任意の言語,国に変更することができます。
 
参考:
国際化プログラミングの常識(@IT)
Locale クラス(Javadoc)
DateFormat クラス
PropertiesEditor
  .properties ファイルで日本語を含むマルチバイト文字を扱う時に便利な Eclipse プラグイン.
これを使うことでいちいち native2ascii を実行する必要がなくなります.
なお、スタンドアロン版(PropertiesEdotor.jar)もあります.
詳しい導入方法はこちらの記事(@IT)が参考になります。