【发布时间】:2025-11-30 06:30:01
【问题描述】:
如何在 Play Framework 2.2.1 中声明可本地化的表单验证消息,包括需要参数的消息?
例如,给定conf/messages 中的这些本地化消息:
password.tooShort="Password needs at least {0} characters."
password.doNotMatch="Passwords don't match."
还有这样的表单定义:
val minLength = 8
val changePasswordForm = Form (
Password ->
tuple(
Password1 -> nonEmptyText.verifying("password.tooShort", p => p.length() >= minLength),
Password2 -> nonEmptyText
).verifying("password.doNotMatch", passwords => passwords._1 == passwords._2)
)
如何声明第一个字段 (Password1) 的验证消息以使用适当的参数 (minLength)?
表单定义调用verifying,只接受不带参数的String消息:
def verifying(error: => String, constraint: (T => Boolean)): Mapping[T] = {
verifying(Constraint { t: T =>
if (constraint(t)) Valid else Invalid(Seq(ValidationError(error)))
})
}
此外,在表单定义期间调用 Messages() 不起作用,因为它会导致使用默认语言,而不是每个请求的语言。
【问题讨论】:
标签: forms scala playframework internationalization playframework-2.2