Scala 迁移到2.6和表单错误未绑定play.i18n.Messages的任何实现
在我的项目中,我在控制器的范围之外定义了一个Scala 迁移到2.6和表单错误未绑定play.i18n.Messages的任何实现,scala,playframework,playframework-2.6,Scala,Playframework,Playframework 2.6,在我的项目中,我在控制器的范围之外定义了一个注册表单。。。原因是我需要从不同的源文件重用它 package views.form import javax.inject.{Inject, Singleton} import play.api.data.Form import play.api.data.Forms._ import play.api.i18n.Messages case class Signup(email: String, password: String, repeatP
注册表单
。。。原因是我需要从不同的源文件重用它
package views.form
import javax.inject.{Inject, Singleton}
import play.api.data.Form
import play.api.data.Forms._
import play.api.i18n.Messages
case class Signup(email: String, password: String, repeatPassword: String, name: String) extends MyUsernamePassword
@Singleton
class SignupForm @Inject() (implicit val messages: Messages) {
val Instance = Form {
mapping(
"email" -> email,
"password" -> nonEmptyText(minLength = 5),
"repeatPassword" -> nonEmptyText(minLength = 5),
"name" -> nonEmptyText
)(Signup.apply)(Signup.unapply).
verifying(messages("playauthenticate.password.signup.error.passwords_not_same"),
data => (data.password != null) && data.password.equals(data.repeatPassword))
}
}
但这会导致运行时错误
play.i18n.Messages未绑定任何实现
。如何修复它?迁移到MessagesApi
:
import javax.inject.{Inject, Singleton}
import play.api.data.Form
import play.api.data.Forms._
import play.api.i18n.{Lang, Langs, MessagesApi}
case class Signup(email: String, password: String, repeatPassword: String, name: String) extends MyUsernamePassword
@Singleton
class SignupForm @Inject() (implicit val langs: Langs, val messagesApi: MessagesApi) {
implicit val lang: Lang = langs.availables.head
val Instance = Form {
mapping(
"email" -> email,
"password" -> nonEmptyText(minLength = 5),
"repeatPassword" -> nonEmptyText(minLength = 5),
"name" -> nonEmptyText
)(Signup.apply)(Signup.unapply).
verifying(messagesApi("playauthenticate.password.signup.error.passwords_not_same")(lang),
data => (data.password != null) && data.password.equals(data.repeatPassword))
}
}
您需要在配置文件中指定语言。例如,
play.i18n.langs=[“en”、“en-US”、“fr”]
。可以找到更多详细信息。谢谢!!我以前一直在使用MessagesApi
,但它需要一个Lang隐式语言,在迁移到2.6之后,它就不再被注入了。我在这里阅读是为了使用消息:。一个问题:为什么它在语句val lang:lang=…
中拾取任意lang?我希望它隐式地来自某个地方的请求。。。但是,它完成了任务,运行时错误现在消失了。@SkyWalker我刚刚将val-lang:lang=langs.availables.head
复制为伪代码,但我相信您通常会从请求中提取语言,如val-lang:lang=request.messages.lang
,但在您的情况下,因为这不在您的控制器内,您需要一些逻辑来选择正确的语言,请求独立(不确定您现在是如何做到的)