Clickのメッセージリソース

Clickのメッセージリソースについて書かれてるサイトが、ぐぐってもあんまり無かったのでちょっと勉強して書いてみた。
ClickはメッセージリソースをMessagesMapクラスにて管理します。Page内にて使用する際、getMessagesメソッドを最初に呼び出したときにMessagesMapインスタンスが生成されます。これはmessagesというインスタンス変数でPage内に保持され、Velocityテンプレート内では"$messages"で参照できます。
HogePageからgetMessagesを呼んだときは、以下のようにmessagesが構成されるようです。

  • 最初にclick-page.propertiesからリソースを読み込む。
  • 次に、HogePageと同一パッケージにあるHogePage.propertiesが読み込み、messagesに対して追加/更新を行う。
  • HogePageがBasePageを継承していたとすれば、HogePage.propertiesが読み込まれる前にBasePage.propertiesを先に読み込む。

リソースを定義したファイルはResourceBundleで読み込まれるため、ロケールの指定が可能です。
うんうん、よくできてる。
しかし、個人的にはこのResourceBundleがあまり好きではありません。
native2asciiをかけたり特殊なエディタを使うなど、めんどくさいにもほどがあります。
Struts1.x系はResourceBundle同等のロケールサポートをPropertyMessageResourcesクラスで独自に行っていました。そのおかげで、少々手を加えるだけでPropertyファイルをXMLに変更することが可能でした。XMLのプロパティファイルなら文字コードが制限されなくて好きです。
ClickもMessageMapを継承してやればなんとかなりそうですね。MessagesMapのloadResourceValuesIntoMapメソッドがprivateなのは痛いですが。
だれかやってないかなー。

そもそもResourceBundleはなぜXMLをサポートしていないのでしょうか。Java6ではサポートされるという噂を聞いたことがあったのですが、ホント?