diff --git a/app/controllers/LilaController.scala b/app/controllers/LilaController.scala index 937e11dd01..c86a1447d3 100644 --- a/app/controllers/LilaController.scala +++ b/app/controllers/LilaController.scala @@ -41,7 +41,6 @@ private[controllers] trait LilaController api = _ => fuccess(Ok(jsonOkBody) as JSON) ) - // implicit def lang(implicit req: RequestHeader) = Env.i18n.pool lang req implicit def lang(implicit ctx: Context) = ctx.lang protected def NoCache(res: Result): Result = res.withHeaders( @@ -352,8 +351,21 @@ private[controllers] trait LilaController else if (HTTPRequest isBot ctx.req) fuccess(NotFound) else result - protected def errorsAsJson(form: play.api.data.Form[_])(implicit lang: play.api.i18n.Messages) = - lila.common.Form errorsAsJson form + private val jsonGlobalErrorRenamer = { + import play.api.libs.json._ + __.json update ( + (__ \ "global").json copyFrom (__ \ "").json.pick + ) andThen (__ \ "").json.prune + } + + protected def errorsAsJson(form: play.api.data.Form[_])(implicit lang: play.api.i18n.Lang) = { + val json = Json.toJson( + form.errors.groupBy(_.key).mapValues { errors => + errors.map(e => lila.i18n.Translator.txt.literal(e.message, e.args, lang)) + } + ) + json validate jsonGlobalErrorRenamer getOrElse json + } protected val pgnContentType = "application/x-chess-pgn" } diff --git a/modules/common/src/main/Form.scala b/modules/common/src/main/Form.scala index 306b57133f..2ea0bf78d1 100644 --- a/modules/common/src/main/Form.scala +++ b/modules/common/src/main/Form.scala @@ -4,7 +4,6 @@ import org.joda.time.DateTimeZone import play.api.data.format.Formats._ import play.api.data.format.Formatter import play.api.data.Forms._ -import play.api.libs.json._ object Form { @@ -39,13 +38,6 @@ object Form { private def pluralize(pattern: String, nb: Int) = pattern.replace("{s}", (nb != 1).fold("s", "")) - private val jsonGlobalErrorRenamer = __.json update ( - (__ \ "global").json copyFrom (__ \ "").json.pick - ) andThen (__ \ "").json.prune - - def errorsAsJson(form: play.api.data.Form[_])(implicit lang: play.api.i18n.Messages) = - form.errorsAsJson validate jsonGlobalErrorRenamer getOrElse form.errorsAsJson - object formatter { def stringFormatter[A](from: A => String, to: String => A): Formatter[A] = new Formatter[A] { def bind(key: String, data: Map[String, String]) = stringFormat.bind(key, data).right map to diff --git a/modules/security/src/main/DataForm.scala b/modules/security/src/main/DataForm.scala index 7f549276d0..6eb07f2774 100644 --- a/modules/security/src/main/DataForm.scala +++ b/modules/security/src/main/DataForm.scala @@ -42,7 +42,7 @@ final class DataForm( regex = """^[^\d].+$""".r, error = "usernameStartNoNumber" ) - ).verifying("", u => !UserRepo.nameExists(u).awaitSeconds(4)) + ).verifying("usernameAlreadyUsed", u => !UserRepo.nameExists(u).awaitSeconds(4)) .verifying("usernameUnacceptable", u => !LameName(u)) val website = Form(mapping(