正方形の周長 #19

PropertiesControlを使ってみる。
以下の三つのプロパティファイルを用意する。

messages.properties
1 = message 1
2 = message 2
3 = message 3
messages_ja.properties (UTF-8)
1 = めっせーじ1
2 = めっせーじ2
messages_ja_JP.properties (UTF-8)
1 = メッセージ1

まず、PropertiesControlを使わず、getBundleメソッドのデフォルトの振る舞いに任せてみる。

...snip
        ResourceBundle rb = ResourceBundle.getBundle("messages");
        for (String key : rb.keySet()) System.out.printf("\"%s\" = \"%s\"%n", key, rb.getString(key));
...snip

基底名がmessagesであるようなリソースバンドルに含まれる全てのキーとそれに対応する文字列を表示させる。
デフォルト動作だと例えばコマンドプロンプト上で実行すると、

"3" = "message 3"
"2" = "?????£????????????"
"1" = "????????≫?????,???"

プロパティファイルがUnicodeエスケープされていないため、当然日本語メッセージが化ける。
次に、PropertiesControlのインスタンスを与えると、

...snip
        ResourceBundle rb = ResourceBundle.getBundle("messages", new PropertiesControl());
...snip
"3" = "message 3"
"2" = "めっせーじ2"
"1" = "メッセージ1"

メッセージが化けることはなく、
また、リソースの親子関係に従って、子にないリソースは親から補完されている。