Date validation - How localize/translate strings "today" and "tomorrow" Date validation - How localize/translate strings "today" and "tomorrow" laravel laravel

Date validation - How localize/translate strings "today" and "tomorrow"


In short, add following code into resources/lang/whichever/validation.php

'values' => [    // or whatever fields you wanna translate    'birth_date' => [        // or tomorrow        'today' => '今天'    ]]

Explained:

https://github.com/laravel/framework/blob/7.x/src/Illuminate/Validation/Concerns/FormatsMessages.php#L319

/** * Get the displayable name of the value. * * @param  string  $attribute * @param  mixed  $value * @return string */public function getDisplayableValue($attribute, $value){    if (isset($this->customValues[$attribute][$value])) {        return $this->customValues[$attribute][$value];    }    // the key we want    $key = "validation.values.{$attribute}.{$value}";    // if the translate found, then use it    if (($line = $this->translator->get($key)) !== $key) {        return $line;    }    if (is_bool($value)) {        return $value ? 'true' : 'false';    }    return $value;}


You can use custom validation messages per field, either on validation language file or in your code itself: https://laravel.com/docs/5.2/validation#custom-error-messages

Let's simulate a controller validation to see how it works:

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use Illuminate\Routing\Controller;class YourController extends Controller{    public function store(Request $request)    {        $rules = [            'birth_date' => 'required|date|before:today|after:01-jan-1920',        ];        $messages = [            'birth_date.before' => 'A data de nascimento deve ser uma data antes de hoje.', // "The birth date must be a date before today" in portuguese        ];        $this->validate($request, $rules, $messages);        /* your stuff */    }}

You can also do that with form requests (which are even nicer), all you need to do is return your custom translated messages inside messages() method. :)


Use custom error messages.

$this->validate(            $request,            [                'phone' => 'required|regex:/^(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}$/i'            ],            [                'regex' => 'You must enter a valid phone number.',                'required' => 'You must enter a valid phone number.'            ]        );

Replace 'regex' and 'required' with 'before:today' and 'before:tomorrow' and replace with custom error messages.