Compiler Assisted Localization (CAL10N)

log4jやslff4jで有名なCeki Gulcuさんが開発したライブラリで、簡単に言うとタイプセーフなResourceBundleのようです。なにかものすごく今さら感がなくもないのですが、Webサイトの記述によると特徴はこんな感じ。

  • タイプセーフ
  • 文字コードはなんでもいい、native2asciiしなくてもいい
  • 高速
  • リソースバンドルを変更したら自動的に再読み込みしてくれる

まあ文字コードは今ならnative2asciiしなくていい方法もあるし、別にエディタで自動変換してくれるのが当たり前なのでそれほど気にならない。サーバにSSHてプロパティファイルをいじるときとかに困ることはあるけれども、リソースバンドルではなく設定を書いたプロパティファイルとかなので国際化とは関係ないし。
マニュアルのページに載っているサンプルコードを見てみます。

@BaseName("colors")
@LocaleData( { @Locale("en_UK"), @Locale("fr") })
public enum Colors  {
  BLUE,
  RED,
  YELLOW;
}

というenumを定義しておいて、ロケールに対応したプロパティファイルを作成します。
colors_en_UK.properties:

BLUE=violets are blue
RED=roses are red
GREEN={0} are green  

colors_fr.properties:

BLUE=les violettes sont bleues
RED=les roses sont rouges
GREEN=les {0} sont verts

メッセージを取得するには以下のようにします。メッセージにパラメータを渡せるのは便利ですね。

IMessageConveyor mc = new MessageConveyor(Locale.FRANCE);

String red = mc.getMessage(Colors.RED);
String blue = mc.getMessage(Colors.BLUE);  
String green = mc.getMessage(Colors.GREEN, "pommes");

プロパティファイルの文字コードenumアノテーションで指定するようです。

@BaseName("colors")
@LocaleData(defaultCharset="UTF8", value = { 
    @Locale("en_UK"), 
    @Locale("fr_FR"),
    @Locale(value="ja_JP", charset="Windows-31J"),
})
public enum Colors {
 BLUE,
 RED,
 GREEN;
}

うーん、どうなんだろう…。文字コードは別にUTF-8固定でもいいような…。
プロパティファイルからenumが自動生成できるとそれなりに便利なのかもしれません。ドキュメントには「enumの雛形を生成するEclipseプラグインを作りたいのでボランティア募集中!」みたいなことが書いてありますが…w