ふたつの川うるおう日記
2006-04-23 (Sun)
_ [Java][Seasar] Mayaaで国際化
テンプレート切り替え機能を使ってみました。
- 動作サンプル
- 右上の English | Japanese で切り替え
Mayaaでは、テンプレートのファイル名を "$" で区切ることでテンプレートを切り替えることができるそうです。
- index.html
- デフォルト
- index$ja.html
- 日本語用
Eclipseで表示した時に、.ja.html の方が .mayaa より先に .html の次に並ぶのでAapcheのコンテントネゴシエーションと一緒のフォーマットの方が判りやすくて嬉しいかもと思いました。
- index.html
- デフォルト
- index.ja.html
- 日本語用
あと、locale=ja といったパラメータが付いちゃうのをどうにか上手いこと隠せないものかいろいろやってみたものの敗北しました。。。
次のような小細工でリンク先が index.html であっても、 index$ja.html に自動的にリダイレクトするように m:beforeRender でしたものの、これだと処理が2回走っちゃうようであんま良くなさそうなので辞めました。
var sessionLocale = session.locale;
var paramLocale = param.locale;
if (sessionLocale != paramLocale) {
redirect(request.contextPath + request.requestedPath + "?locale=" + sessionLocale);
}
多言語のテンプレートを後から追加することを考えると、HTMLテンプレートファイルの場所をweb.xmlなどwar内のファイルでwar外のパスに設定できる機能があると便利そう。
[]



>war外のパスに設定<br>実は既にあります。<br><br>META-INF/org.seasar.mayaa.source.PageSourceFactory<br>というファイルを次のような内容で作れば動作します。<br>valueには${propertyname}の形でシステムプロパティを指定できます。(antっぽく)<br><br><?xml version="1.0" encoding="iso-8859-1"?><br><!DOCTYPE factory<br> PUBLIC "-//The Seasar Foundation//DTD Mayaa Factory 1.0//EN"<br> "http://mayaa.seasar.org/dtd/mayaa-factory_1_0.dtd"><br><factory><br> <parameter name="absolutePath" value="/path/to/templates"/><br></factory>
ありがとうございます。期待通り動作しましたー。<br><br>無設定Strutsが起動時に@StrutsActionForwardに設定したファイルを探しに行くようなので、標準語用をWEB-INF/page以下に置いて、多言語用ファイルを別ディレクトリに配置して使いたいと思います。