Documentation

§メッセージ API と多言語対応

§アプリケーションの対応言語を指定する

アプリケーションの対応言語は、fren-US のように、 ISO 639-2 言語コード の後に省略可能な ISO 3166-1 alpha-2 国コード を続けて指定します。

初めに、 conf/application/conf. ファイルであなたのアプリケーションの対応言語を指定しましょう。

play.i18n.langs = [ "en", "en-US", "fr" ]

§メッセージの外部ファイル化

メッセージは conf/messages.xxx のようなファイルに外部化することができます。

デフォルトの conf/messages というファイルは、全ての言語にマッチします。このファイルに加えて conf/messages.frconf/messages.en-US のように言語ごとのメッセージファイルを指定することができます。

メッセージは、play.api.i18n.Messages オブジェクトから取得することができます。

val title = Messages("home.title")

全ての国際化対応に関する API 呼び出しは、現在のスコープから暗黙の引数 play.api.i18n.Messages を受け取ります。この暗黙の値は、使用言語と (原則的に) 国際化されたメッセージの両方を含んでいます。

このような暗黙の値を取得する最も簡単な方法は、I18nSupport トレイトを使用することです。例えばコントローラーの中で次のように使用することができます。

import play.api.i18n.I18nSupport
class MyController(val messagesApi: MessagesApi) extends Controller with I18nSupport {
  // ...

暗黙のスコープ内に Lang もしくは RequestHeader が存在する限り、I18nSupport トレイトは暗黙の Messages 値を与えます。

メモ: RequestHeader が暗黙のスコープ内に存在する場合は、その Accept-Language ヘッダと MessagesApi の対応言語を考慮した上で適切な言語が決定され、使用されます。 テンプレートに @()(implicit messages: Messages) のように、暗黙のパラメータ Messages を追加する必要があります。

メモ: Play はなにも設定しなくても (DefaultMessagesApi 実装を使う) MessagesApi をインジェクションする方法も “知って” いるので、 @javax.inject.Inject アノテーションでコントローラを注釈するだけで、Play は自動的にこのコンポーネントを結びつけることができます。

§メッセージの書式

メッセージは java.text.MessageFormat ライブラリを使ってフォーマットされます。例えば、次のようなメッセージが定義されているとしましょう。

files.summary=The disk {1} contains {0} file(s).

このメッセージのパラメータは次のように指定できます。

Messages("files.summary", d.files.length, d.name)

§アポストロフィに対する注意

メッセージには java.text.MessageFormat を使うので、シングルクォーテーションは引数代入をエスケープするためのメタキャラクタとして使われることに注意してください。

例えば、以下のようなメッセージが定義されているとします:

info.error=You aren''t logged in!
example.formatting=When using MessageFormat, '''{0}''' is replaced with the first parameter.

結果は以下のようになるでしょう:

Messages("info.error") == "You aren't logged in!"
Messages("example.formatting") == "When using MessageFormat, '{0}' is replaced with the first parameter."

§HTTP リクエストから対応言語を取得する

HTTP リクエストから対応言語を取得することができます。

def index = Action { request =>
  Ok("Languages: " + request.acceptLanguages.map(_.code).mkString(", "))
}

Next: アプリケーションのテスト


このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。