Category Archives: Play framework - Page 2

Play 2.0 RC3 における i18n の勘所

Play 2.0 RC3 で i18n を行う場合、他の Web アプリケーションフレームワークに比べてちょっと違うかなと思ったところがあったのでメモ。

まず、自分のアプリケーションの conf/messages でメッセージ定義するのは多分ナシ

なぜかといいますと、Play そのもの(play_2.9.1.jar)が持っている messages のほうが優先されるので、たとえば、

contraint.required=必須

みたいなことをやっても「Required」というもともとのメッセージが表示されてしまいます。

ではどうすれば良いかといいますと、明示的にロケールを指定してやればOK。ただしこれにも癖があります。

リソースバンドルを使い慣れた Java プログラマは、ロケールが ja_JP ならば messages_ja_JP または messages_ja が読み込まれるのではないかと当たりをつけることでしょう。Github 上の Wiki によればファイル名とロケールのセパレータはアンダースコアではなくピリオドなのでロケールを指定するときは messages.ja のように書けばいいことがわかります。

ところがここがハマりポイント! ロケールが ja_JP のとき、このファイルは読み込まれません!なんと、ja と ja_JP は Play では別物なのです!

しかも、Java では ja_JP とロケールを表記するのは当たり前ですが、Play では ja-JP と書き表します。

ということで、メッセージの定義は messages.ja-JP で行うのが無難そうです。

今日の Play 2.0 SNAPSHOT

毎日追いかけている Play 2.0 SNAPSHOT。

今日はでっかく変わった所がありました。それは、evolutions の置き場です。これまでは db フォルダにありましたが、今日から conf フォルダに置くことになったようです。sample もまだ直っていないので、気をつけてください。

Play framework 2.0 SNAPSHOT 順調に仕上がってきてます

ここのところ毎日 Play framework 2.0 SNAPSHOT を github から pull してきてウォッチしています。

Beta ではできなかったテスト時の Evolutions も動くようになり、DB のテストもやりやすくなりました。

今朝試してみたら、いままで Wiki ドキュメントに載っていながらうまく動かなかった外部設定ファイルのしていもうまくいくようになっていました。

ところで将来 Heroku で使用することを考えているので、RDBMS は自ずから PostgreSQL になるのでテストでは Play framework 標準の H2 ではなく、より PostgreSQL と互換性の高い HSQLDB を使用しています(といっても、SERIAL 型が使いたいだけなのですが)。conf/application.conf には以下のように指定するといいようです。

db.default.driver=org.hsqldb.jdbc.JDBCDriver
db.default.url="jdbc:hsqldb:mem:play;sql.syntax_pgs=true"

sql.syntax_pgs=true というのがミソで、これによって PostgreSQL 風シンタックスが有効化されます。これをつけないと HSQLDB で Play framework は一切動きません。

Play framework 2.0 Beta を試してみた

先日リリースされた Play framework 2.0 Beta(Scala) を試してみました。

Beta だけあって「動くところしか動かない」という感じです。実際、まだまだだなと思った部分を挙げてみます。

  • i18n まわりがちょっと怪しい。プリセットのメッセージを変更できない。
  • play evolutions:apply に相当する機能がない?
  • 開発サーバのポート番号が変更できない。
  • フレームワーク ID の指定方法がこれまでと違うか、まだ機能していない(ドキュメンテーションされていない)。
  • インメモリデータベースを使用しても自動的に Evolutions が実行されない。なので、テストで使用できない。
  • テンプレートの文字セットの指定方法が不明(Heroku にデプロイしたら化けた)。
ちょっと軽めのアプリケーションを作成してみてもこれだけの出てきたので、やはりまだまだ使用に耐えない品質のようです。