2017-01-20 7 views
0

私はplay2.5アプリケーションと私は国際化されたエラーメッセージをしたいと思うフォームがあります。私は別のオブジェクトにフォームを持ち、コントローラでそれを使用します。暗黙のメッセージを見つけることができなかったので、コンパイルしないでください。暗黙のメッセージがplay2.5でコンパイルエラー

私はこれが簡単な解決策だと思いますが、私はプレイやスケーラーには新しく、どんなヒントにも感謝しています。

エラー:(14、45)は、パラメータのメッセージのための暗黙的な値を見つけることができませんでした:play.api.i18n.Messages "ユーザー名" - > "error.email.required"(メッセージを()email.verifying、{! _.isEmpty})、あなたがスコープに暗黙のplay.api.i18n.Messages値を取得するためにI18nSupport形質を使用する必要が

object LoginForm { 

    val form = Form(
    mapping(
     "username" -> email.verifying(Messages("error.email.required"), {!_.isEmpty}), 
     "pasword" -> nonEmptyText(8,20).verifying(Messages("error.password.required"), {!_.isEmpty}) 
    )(Data.apply)(Data.unapply) 
) 

    case class Data(
    username: String, 
    password: String 
) 

} 

答えて

1

。ここでの完全な説明:あなたのユースケースでは

https://www.playframework.com/documentation/2.5.x/ScalaI18N#Externalizing-messages

、最も簡単な方法は、I18nSupport形質を使用して、コントローラの内部のフォームを定義することです。 ScalaとPlayの初心者でも、このアプローチをお勧めします。

より高度なアプローチは、LoginForm形質でフォームを定義し、I18nSupport形質に依存することを宣言することです。次に、あなただけ(I18nSupportトレイトに混合しなければならない)、あなたがそれを必要とするコントローラにこのLoginForm形質をミックスインです

trait LoginForm{ 
    self: I18nSupport => 

    //define form here 
} 

:これは次のようになります。

+0

TNXが、私はまた、コントローラ内部のフォームを移動するために考えていたが、は、よりエレガントに見えました私は提案された解決策を試してみます – simonC

+0

私は言及したような特性を行っていますが、シンボルI18nSupportを解決できません...私は何をインポートする必要がありますか? import play.api.i18n.I18nSupportを試しましたが、うまくいきません。 – simonC

+0

実行中のPlayのバージョンは何ですか? – josephpconley

0

このようなフォームに暗黙的にlangを指定すると機能しますか?

def form(implicit lang: Lang) = Form(
    mapping(
     "username" -> email.verifying(Messages("error.email.required"), {!_.isEmpty}), 
     "pasword" -> nonEmptyText(8,20).verifying(Messages("error.password.required"), {!_.isEmpty}) 
    )(Data.apply)(Data.unapply) 
) 

時々ケースクラスのコンパニオンオブジェクトにフォームを移動するために素晴らしいことができます:

case class Data(
    username: String, 
    password: String 
) 

object Data { 
    def form(implicit lang: Lang) = ... 
} 
関連する問題