【Java】国際化対応 ~ ResourceBundle ~

主なメソッド

 1) ResourceBundle.getBundle("【propertiesファイル】")
  → propertiesファイルのインスタンスを取得
 2) getString("【キー名】")
  → キーに従ったバリュー値の取得
 3) containsKey("【キー名】")
  → そのキーがあるかどうか

サンプル

SampleClass.java

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

public class SampleClass {

   public static void main(String[] args) {
      try {
         ResourceBundle defaultBundle = 
               ResourceBundle.getBundle("demo.sampleproperties.sample");
         String value = defaultBundle.getString("sample.key1");
         System.out.println("デフォルト=" + value);

         ResourceBundle japanBundle = 
               ResourceBundle.getBundle("demo.sampleproperties.sample", Locale.JAPAN);
         value = japanBundle.getString("sample.key1");
         System.out.println("日本語=" + value);

         ResourceBundle englishBundle =
               ResourceBundle.getBundle("demo.sampleproperties.sample", Locale.ENGLISH);
         value = englishBundle.getString("sample.key1");
         System.out.println("英語=" + value);
         
         if (englishBundle.containsKey("sample.key1")) {
            System.out.println("Exists key");
         } else {
            System.out.println("No key...");
         }
         
         if (englishBundle.containsKey("sample.key2")) {
            System.out.println("Exists key");
         } else {
            System.out.println("No key...");
         }
      } catch (MissingResourceException ex) {
         System.out.println("MissingResourceException : " + ex.getMessage());
      } catch (Exception ex) {
         System.out.println("Exception : " + ex.getMessage());
      } finally {
      }
   }
}

propertiesファイル

demo.sampleproperties.sample.properties

demo/sampleproperties/sample.properties
Hello

demo.sampleproperties,sample_jp.properties

demo/sampleproperties/sample_jp.properties
sample.key1=\u3053\u3093\u306b\u3061\u308f

demo.sampleproperties,sample_en.properties

demo/sampleproperties/sample_en.properties
Hello!!

出力結果

デフォルト=Hello
日本語=Hello
英語=Hello!!
Exists key
No key...

補足

getString()の動作について

 * propertiesファイルにキーがない場合 : 例外「MissingResourceException」が発生する
 * propertiesファイルにキーはあるが空の場合 : 空文字""が渡ってくる

トラブルシューティング

ResourceBundle.getBundleで、例外「MissingResourceException」が発生する

解決方法

* 国際化に拘らなければ、以下のような方法で直接ファイルを指定することもできる
File file = new File("./demo.sampleproperties.sample.properties");
Stream stream = new FileInputStream(file);
ResourceBundle defaultBundle = ResourceBundle.getBundle(stream);