Tapestry4 ローカライズ(1) HTMLテンプレート

Tapestryの一つの利点は、ローカライズ手法がきちんと用意されているということです。
Tapestryを使用した開発で、日本語の文字化けやその他、日本語独自の問題という物を体験した事はありません。
Tapestryでは単純な文字列のローカライズ方法に関してもいくつか用意されています。

HTMLテンプレート自体の切り替え

Home.htmlを日本語ブラウザでアクセスしたときにHome_jp.htmlを自動的に表示されるといったことが出来ます。
Home.htmlと同じディレクトリにHome_jp.htmlを配置するだけ終了です。
フランス語専用であれば、Home_fr.htmlを用意する等各言語別にHTMLテンプレートを用意することが可能です。
Home.htmlとHome_jp.htmlの2つのファイルが存在し、言語frでアクセスした場合、Home_fr.htmlは存在しませんのでデフォルトのHome.htmlが表示されます。このような仕様になっているためとりあえず。日本語と英語だけといった開発も可能です。
ロケールの違いによる、動作確認には、FireFox1.5では、オプションパネルの「詳細」->「言語」->「言語設定」で切り替え可能です。
この手法の欠点はHTMLテンプレートが増えるという事です。
HTMLテンプレートは画面毎に必要なため、2種類の言語対応しただけでも倍のファイル数となります。HTMLテンプレートには、コンポーネント呼び出し等のロジックが入るため、修正も両方のファイルに行う必要があるため非常に煩雑な作業になります。
このため通常使われるのは、次にあげるコンポーネントメッセージカタログによるローカライズ手法が使われます。

コンポーネントメッセージカタログによるローカライズ

メッセージファイルは、Javaのプロパティファイルと同じ形式で「key=値」の形式で、キーに関連付けられた値をHTMLテンプレートから参照可能です。
例えば
-Home.html

<span key="hoge" /><span jwcid="@Insert" value="message:hoge" />

-Home_ja.properties

hoge=こんにちは

-Home.properties

hoge=hello

(Home.propertiesはHome.htmlと同じ場所に配置します。)
等記述することで、HTMLテンプレートファイル自体の切り替えと同様に、ブラウザのロケールを参照し日本語や英語その他の言語に切り替える事が可能です。
しかし、HTMLテンプレートの数が増えると、ほぼ同じ内容のproperitesファイルや、1行しかないpropertiesファイルが存在する等ファイルが増えていきます。HTMLテンプレートファイル自体の切り替えとは異なり各言語用ファイルにロジックが含まれないため有効な手法ではありますが、手間がかかります。
そこで独自に1つのプロパティファイルから取得できるような仕組みを実装していたのですが、Tapestry4になりネームスペースメッセージカタログ機能が追加され、非常に簡単になりました。
ネームスペースメッセージカタログ関しては次回に……


コメント

このブログの人気の投稿

島へ移住の話【炊飯】

ドローンプログラミング体験教室を伊豆大島の小学校でしてきました

情報処理安全確保支援士登録証のカード型が届きました。