コントローラー:国際化エラー:コントローラとテンプレートが異なる暗黙の言語
def test = Action { implicit request =>
import play.api.i18n._
val msg = Messages("error.invalid")
implicit val langInController = lang(request)
Ok(views.html.test(langInController, msg))
}
ビュー:
@(langInController: play.api.i18n.Lang, msg:String)(implicit request: Request[_])
<div>Lang from controller: @langInController, Message: @msg</div>
<div>Message from view: @play.api.i18n.Messages("error.required")</div>
メッセージリソース、conf/messages.zh-CN
:
error.required=该字段必填
が
をしよう要求ヘッダー
Accept-Language:en-us,en;q=0.5
を送信してtest
アクションにアクセスする英語のFirefoxを使用します。結果は次のとおりです。Language from controller: Lang(en,), Message: This field is required Message in view: 该字段必填
はそれを訪問するリクエストヘッダ
Accept-Language:zh-CN,zh;q=0.8
を送り、中国Google Chromeを使用します。結果は次のとおりです。Language: Lang(zh,CN), Message: 该字段必填 Message in view: 该字段必填
テストから、我々がいることを知っている:テンプレートで使用されたリクエストヘッダのAccept-Language
- OSによって決定される。
環境:
- プレイ2は、私のOSは、Windows 7のx64 中国語版
である私がプレイ2は同じ暗黙的に使用すべきだと思うのGitHubから最新play2.1-SNAPSHOT(2012-03-16)
Build.sbt
で何かを追加することによって、それを修正することができます:TemplateMixin
だけである val main = PlayProject(...) (
templatesImport ++= Seq("utilis.TemplateMixin._")
)
:
object TemplateMixin extends play.api.mvc.Controller
(それはコントローラを拡張し、ちょうどimplicit def lang(request)
のようないくつかのメソッドを、再利用することである。)
をしかし、私はそれがPlayフレームワークによって行われるべきだと思います。
もう一度ありがとうございます。 play2のドキュメントには良い答えが追加されるべきです。 – Freewind
これはデフォルトの動作ではないのはなぜですか?私は、ほとんどのアプリが、ビュー内の陰的なLandをコントローラで使用されているものと同じにしたいと思っています。 – Ike
これをデフォルトの動作にするには、(暗黙の値を提供できない)Javaコントローラで使用するテンプレートとScalaコントローラで使用するテンプレートを区別する必要があります。 –