§メッセージ API と多言語対応
§アプリケーションの対応言語を指定する
アプリケーションの対応言語は、fr
や en-US
のように、**ISO 639-2 言語コード** の後に省略可能な ISO 3166-1 alpha-2 国コード を続けて指定します。
初めに、 conf/application/conf.
ファイルであなたのアプリケーションの対応言語を指定しましょう。
application.langs="en,en-US,fr"
§メッセージの外部ファイル化
メッセージは conf/messages.xxx
のようなファイルに外部化することができます。
デフォルトの conf/messages
というファイルは、全ての言語にマッチします。このファイルに加えて conf/messages.fr
や conf/messages.en-US
のように言語ごとのメッセージファイルを指定することができます。
メッセージは、play.api.libs.i18n.Messages
オブジェクトから取得することができます。
val title = Messages("home.title")
全ての国際化対応に関する API は、現在のスコープ内の implicit な play.api.libs.i18n.Lang
を implicit parameter として受け取ります。implicit なしで、次のように明示することも可能です。
val title = Messages("home.title")(Lang("fr"))
Note: implicit な
Request
がスコープ内に存在する場合は、そのAccept-Language
ヘッダとアプリケーションの対応言語を考慮した上で適切な言語が決定されて、 implicit なLang
として提供されます。 テンプレートに@()(implicit lang: Lang)
のように、 implicit パラメータLANG
を追加する必要があります。
§メッセージの書式
メッセージは java.text.MessageFormat
ライブラリを使ってフォーマットされます。例えば、次のようなメッセージが定義されているとしましょう。
files.summary=The disk {1} contains {0} file(s).
このメッセージのパラメータは次のように指定できます。
Messages("files.summary", d.files.length, d.name)
§HTTP リクエストから対応言語を取得する
HTTP リクエストから対応言語を取得することができます。
def index = Action { request =>
Ok("Languages: " + request.acceptLanguages.map(_.code).mkString(", "))
}
次ページ: Global オブジェクト