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 で行うのが無難そうです。

Leave a Comment

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください