我有一个play2.5应用程序和一个表单,我希望将错误消息国际化。我将表单放在一个单独的对象中并在控制器中使用它。但是玩dos不能编译,因为找不到隐含的消息。
我认为这是一个微不足道的解决方案,但我是玩游戏和scala的新手,并且会感激任何提示。
错误:(14,45)找不到参数消息的隐含值:play.api.i18n.Messages "用户名" - > 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
)
}
答案 0 :(得分:1)
您需要使用I18nSupport
特征来获取范围中的隐式play.api.i18n.Messages
值。这里有完整的解释:
https://www.playframework.com/documentation/2.5.x/ScalaI18N#Externalizing-messages
对于您的用例,最简单的方法是在使用I18nSupport
特征的控制器内部定义表单。由于你是Scala和Play的新手,我建议采用这种方法。
更高级的方法是在LoginForm
特征中定义表单,并声明对I18nSupport
特征的依赖。这看起来像是:
trait LoginForm{
self: I18nSupport =>
//define form here
}
然后你只需将这个LoginForm
特征混合到你需要它的控制器中(它应该混合在I18nSupport
特征中)。
答案 1 :(得分: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) = ...
}