I have some validations in place,
and I am validating it like this:
and I noticed when there is more than 1 error,
laravel will add to the message "and 1(or 2 or 4..) more error(s)" ..
Take a look at the images and you will see what I mean:
I found out where this is happening inside laravel framework / which function:
it calls the Translater get method with a dynamic key!
How would I translate dynamic keys??
I tried a few things:
- Adding the key with the place holder in both English/Portuguese "validation" translation file
- Add the key with the number itself (replaced placeholder)
none took effect, see what I mean below:
I’ve noticed there are other people with the same issue when searching in google but so far I have not found a solution, I would like not to have to do a "string replace" and use a more elegant solution… Any one could help?
other people with the same issue:
https://github.com/laravel/framework/discussions/41230
Thanks alot
3
Answers
A quick fix / solution that works/worked for my case ( because I only need to display first error, one at a time, and not multiple )
this will remove the extra (and 1 more error.. ):
In some cases you will also need to add the "bail" in the validation rules (to avoid more than 1 error per field)
The
(and :count more error)
and(and :count more errors)
need to be added to your json translation files as this is not a "short key" but a "translation string": https://laravel.com/docs/9.x/localization#using-translation-strings-as-keysSolution proposed by Dennis works, but if you are not interested in displaying the exact number of errors and you would like to replace the whole message with something more generic you can also consider to override the
invalidJson()
method inapp/Exceptions/Handler.php
:This will work if you are working with API routes.