play2.5 中的隐式消息编译错误
implicit messages compile error in play2.5
我有一个 play2.5 应用程序和一个表单,我希望在其中国际化错误消息。我将表单放在一个单独的对象中,并在控制器中使用它。但是播放没有编译,因为找不到隐式消息。
我想这是一个微不足道的解决方案,但我是玩 scala 的新手,如果有任何提示,我将不胜感激。
错误:(14, 45) 找不到参数消息的隐含值:play.api。i18n.Messages
"username" -> email.verifying(消息("error.email.required"), {!_.isEmpty}),
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
)
}
您需要使用 I18nSupport
特性来获取范围内的隐式 play.api.i18n.Messages
值。完整解释在这里:
https://www.playframework.com/documentation/2.5.x/ScalaI18N#Externalizing-messages
对于您的 use-case,最简单的方法是在使用 I18nSupport
特征的控制器内部定义表单。由于您是 Scala 和 Play 的新手,我推荐这种方法。
一种更高级的方法是在 LoginForm
特征中定义表单并声明对 I18nSupport
特征的依赖。这看起来像:
trait LoginForm{
self: I18nSupport =>
//define form here
}
然后你只需将这个 LoginForm
特性混合到你需要它的控制器中(它应该混合在 I18nSupport
特性中)。
像这样隐式地为表单提供 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)
)
有时将表单移动到案例的伴生对象会很好 class:
case class Data(
username: String,
password: String
)
object Data {
def form(implicit lang: Lang) = ...
}
我有一个 play2.5 应用程序和一个表单,我希望在其中国际化错误消息。我将表单放在一个单独的对象中,并在控制器中使用它。但是播放没有编译,因为找不到隐式消息。
我想这是一个微不足道的解决方案,但我是玩 scala 的新手,如果有任何提示,我将不胜感激。
错误:(14, 45) 找不到参数消息的隐含值:play.api。i18n.Messages "username" -> email.verifying(消息("error.email.required"), {!_.isEmpty}),
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
)
}
您需要使用 I18nSupport
特性来获取范围内的隐式 play.api.i18n.Messages
值。完整解释在这里:
https://www.playframework.com/documentation/2.5.x/ScalaI18N#Externalizing-messages
对于您的 use-case,最简单的方法是在使用 I18nSupport
特征的控制器内部定义表单。由于您是 Scala 和 Play 的新手,我推荐这种方法。
一种更高级的方法是在 LoginForm
特征中定义表单并声明对 I18nSupport
特征的依赖。这看起来像:
trait LoginForm{
self: I18nSupport =>
//define form here
}
然后你只需将这个 LoginForm
特性混合到你需要它的控制器中(它应该混合在 I18nSupport
特性中)。
像这样隐式地为表单提供 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)
)
有时将表单移动到案例的伴生对象会很好 class:
case class Data(
username: String,
password: String
)
object Data {
def form(implicit lang: Lang) = ...
}