メイン

2006年02月24日

Tapestry4 ローカライズ Validation

Tapestryでは、Formから入力された文字列のValidation機能が存在します。

必須入力項目に何もデータを入力せずにSubmitされたときに、自動的にJavaScriptのダイアログを出したり、画面上にエラーメッセージを表示したりします。Validation自体の機能の説明は別の機会に譲るとして、ここで表示されるエラーメッセージもブラウザの言語設定によって自動的に英語やフランス語等に変わります。

必須入力項目等の簡単な処理であれば、標準で用意されている物を使った方が便利ですが、Tapestry3の時と同様に日本語のメッセージファイルがjarの中に含まれていませんので日本語メッセージが表示されません。

プロパティファイルなので作るのは簡単ですが、作る前に調べてみると
http://issues.apache.org/jira/browse/TAPESTRY-812
で、既にアップロードされていました。(ありがとう作った方)
次のリリースのTapestry4.1には含まれるようです。

Tapestry4.1がリリースされるまでは、上記URLからプロパティファイル(ValidationStrings_ja.properties)をダウンロードし、jarにパックしなおすか、プロジェクトのソースディレクトリ JavaSource/org/apache/tapestry/valid/ValidationStrings_ja.propertiesにコピーすることで、エラーメッセージ等が自動的に変わります。

2006年02月23日

Tapestry4 ローカライズ(2) ネームスペースメッセージカタログ

前回の続き...

Tapestry4で追加されたネームスペースメッセージカタログを使うことで、複数のページやコンポーネントで共通したキーを使い1つのメッセージカタログに纏める事ができます。

ファイルの名前は、サーブレット名+propertiesとなります。
従って、


  • WEB-INF/myApp.application

  • WEB-INF/myApp.properties

  • WEB-INF/myApp_ja.properties


上記のような配置になります。

非常に便利になるお勧め機能です。

2006年02月21日

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になりネームスペースメッセージカタログ機能が追加され、非常に簡単になりました。

ネームスペースメッセージカタログ関しては次回に......

タオソフトウェア

tao twitter
tao twitter
tao twitter

広告