When using a language other than english, it can be pretty confusing when a form/api returns a validation error, because by default it will use the names of the attributes in the form itself, so it will look quite jarring.
For example if i have an email field with the required
rule, and it fails in Arabic, here's what I would get:
{
"errors": {
"email": ["الØقل email مطلوب"]
}
}
it might work, but it won't correspond to what the user is seeing on their screen.
Luckily this is a pretty easy fix.
with any Laravel project, in the lang
directory for each language, there should exist a file called validation.php
, if this file doesn't exist for your target language, then go ahead and create it, if you're on linux you can easily use touch lang/ar/validation.php
to create it from terminal.
the validation.php
file contains translations for all validation rules by default, and it should also contain an empty array called attributes
, if it doesn't go ahead and add it.
The attributes
array is a key value pair that will be used, so if you have a field called email
, then you'd add a key email
and the value corresponds to the translation of that attribute, here's an example
// lang/translation/ar/validation.php
return [
// rule translations
'attributes' => [
'email' => 'البريد الإلكتروني',
'user.email' => 'البريد الإلكتروني',
]
];
as you can see, we can simply map the field name to its translation, and one nice use case is that if you're expecting different objects in a request, you can just use the path to that attribute in the json using the dot notation and it will work as expected.
so in the previous example, the new validation response should look something like this:
{
"errors": {
"email": ["Øقل البريد الإلكتروني مطلوب"]
}
}
You can even use these translations to convert a technical input name to a more human readable name for better UX.