§メッセージ 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.i18n.Messages
オブジェクトから取得することができます。
val title = Messages("home.title")
全ての国際化対応に関する API は、現在のスコープ内の implicit な play.api.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)
§アポストロフィに対する注意
メッセージには 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(", "))
}
次ページ: Global オブジェクト
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。