c1b7cb7d61
Accessibility (Pa11y live) / a11y (push) Has been cancelled
UI-аудит раунд 2: APP_LOCALE=ru, но директории lang/ не было → Laravel отдавал сырой ключ «validation.required» во все формы без кастомных messages() (профиль, создание проекта, реквизиты для оплаты и т.д.). Auth-формы свой messages() имеют. Добавлен каноничный ru-перевод (laravel-lang) + секция attributes с русскими именами полей продукта (Имя/Телефон/Лимит лидов в день/ИНН/…). Верификация: trans(validation.required)→«Поле … обязательно для заполнения.»; форма профиля в Playwright показывает «Поле Имя обязательно для заполнения.» вместо «validation.required». Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
205 lines
16 KiB
PHP
205 lines
16 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/*
|
|
* Русские сообщения валидации (UI-аудит 21.06.2026).
|
|
*
|
|
* Причина: APP_LOCALE=ru, но директории lang/ не было → Laravel отдавал сырой
|
|
* ключ «validation.required» во все формы без кастомных messages() (профиль,
|
|
* создание проекта и т.д.). Auth-формы свои messages() имеют — их не затрагивает.
|
|
*
|
|
* Базис — каноничный перевод laravel-lang/lang (ru).
|
|
*/
|
|
|
|
return [
|
|
'accepted' => 'Вы должны принять :attribute.',
|
|
'accepted_if' => 'Вы должны принять :attribute, когда :other равно :value.',
|
|
'active_url' => 'Поле :attribute содержит недействительный URL.',
|
|
'after' => 'Поле :attribute должно содержать дату после :date.',
|
|
'after_or_equal' => 'Поле :attribute должно содержать дату не раньше :date.',
|
|
'alpha' => 'Поле :attribute может содержать только буквы.',
|
|
'alpha_dash' => 'Поле :attribute может содержать только буквы, цифры, дефис и нижнее подчёркивание.',
|
|
'alpha_num' => 'Поле :attribute может содержать только буквы и цифры.',
|
|
'array' => 'Поле :attribute должно быть массивом.',
|
|
'ascii' => 'Поле :attribute может содержать только однобайтовые буквенно-цифровые символы.',
|
|
'before' => 'Поле :attribute должно содержать дату до :date.',
|
|
'before_or_equal' => 'Поле :attribute должно содержать дату не позже :date.',
|
|
'between' => [
|
|
'array' => 'Количество элементов в поле :attribute должно быть от :min до :max.',
|
|
'file' => 'Размер файла в поле :attribute должен быть от :min до :max Кбайт.',
|
|
'numeric' => 'Поле :attribute должно быть от :min до :max.',
|
|
'string' => 'Количество символов в поле :attribute должно быть от :min до :max.',
|
|
],
|
|
'boolean' => 'Поле :attribute должно иметь значение логического типа.',
|
|
'can' => 'Поле :attribute содержит недопустимое значение.',
|
|
'confirmed' => 'Поле :attribute не совпадает с подтверждением.',
|
|
'current_password' => 'Неверный пароль.',
|
|
'date' => 'Поле :attribute не является датой.',
|
|
'date_equals' => 'Поле :attribute должно содержать дату, равную :date.',
|
|
'date_format' => 'Поле :attribute не соответствует формату :format.',
|
|
'decimal' => 'Поле :attribute должно иметь :decimal знаков после запятой.',
|
|
'declined' => 'Поле :attribute должно быть отклонено.',
|
|
'declined_if' => 'Поле :attribute должно быть отклонено, когда :other равно :value.',
|
|
'different' => 'Поля :attribute и :other должны различаться.',
|
|
'digits' => 'Длина цифрового поля :attribute должна быть :digits.',
|
|
'digits_between' => 'Длина цифрового поля :attribute должна быть от :min до :max.',
|
|
'dimensions' => 'Поле :attribute имеет недопустимые размеры изображения.',
|
|
'distinct' => 'Поле :attribute содержит повторяющееся значение.',
|
|
'doesnt_end_with' => 'Поле :attribute не должно заканчиваться одним из следующих значений: :values.',
|
|
'doesnt_start_with' => 'Поле :attribute не должно начинаться с одного из следующих значений: :values.',
|
|
'email' => 'Поле :attribute должно быть действительным электронным адресом.',
|
|
'ends_with' => 'Поле :attribute должно заканчиваться одним из следующих значений: :values.',
|
|
'enum' => 'Выбранное значение для :attribute некорректно.',
|
|
'exists' => 'Выбранное значение для :attribute некорректно.',
|
|
'extensions' => 'Поле :attribute должно иметь одно из следующих расширений: :values.',
|
|
'file' => 'Поле :attribute должно быть файлом.',
|
|
'filled' => 'Поле :attribute обязательно для заполнения.',
|
|
'gt' => [
|
|
'array' => 'Количество элементов в поле :attribute должно быть больше :value.',
|
|
'file' => 'Размер файла в поле :attribute должен быть больше :value Кбайт.',
|
|
'numeric' => 'Поле :attribute должно быть больше :value.',
|
|
'string' => 'Количество символов в поле :attribute должно быть больше :value.',
|
|
],
|
|
'gte' => [
|
|
'array' => 'Количество элементов в поле :attribute должно быть не меньше :value.',
|
|
'file' => 'Размер файла в поле :attribute должен быть не меньше :value Кбайт.',
|
|
'numeric' => 'Поле :attribute должно быть не меньше :value.',
|
|
'string' => 'Количество символов в поле :attribute должно быть не меньше :value.',
|
|
],
|
|
'hex_color' => 'Поле :attribute должно содержать корректный шестнадцатеричный цвет.',
|
|
'image' => 'Поле :attribute должно быть изображением.',
|
|
'in' => 'Выбранное значение для :attribute некорректно.',
|
|
'in_array' => 'Поле :attribute должно существовать в :other.',
|
|
'integer' => 'Поле :attribute должно быть целым числом.',
|
|
'ip' => 'Поле :attribute должно быть действительным IP-адресом.',
|
|
'ipv4' => 'Поле :attribute должно быть действительным IPv4-адресом.',
|
|
'ipv6' => 'Поле :attribute должно быть действительным IPv6-адресом.',
|
|
'json' => 'Поле :attribute должно быть JSON-строкой.',
|
|
'lowercase' => 'Поле :attribute должно быть в нижнем регистре.',
|
|
'lt' => [
|
|
'array' => 'Количество элементов в поле :attribute должно быть меньше :value.',
|
|
'file' => 'Размер файла в поле :attribute должен быть меньше :value Кбайт.',
|
|
'numeric' => 'Поле :attribute должно быть меньше :value.',
|
|
'string' => 'Количество символов в поле :attribute должно быть меньше :value.',
|
|
],
|
|
'lte' => [
|
|
'array' => 'Количество элементов в поле :attribute должно быть не больше :value.',
|
|
'file' => 'Размер файла в поле :attribute должен быть не больше :value Кбайт.',
|
|
'numeric' => 'Поле :attribute должно быть не больше :value.',
|
|
'string' => 'Количество символов в поле :attribute должно быть не больше :value.',
|
|
],
|
|
'mac_address' => 'Поле :attribute должно быть корректным MAC-адресом.',
|
|
'max' => [
|
|
'array' => 'Количество элементов в поле :attribute не может превышать :max.',
|
|
'file' => 'Размер файла в поле :attribute не может быть больше :max Кбайт.',
|
|
'numeric' => 'Поле :attribute не может быть больше :max.',
|
|
'string' => 'Количество символов в поле :attribute не может превышать :max.',
|
|
],
|
|
'max_digits' => 'Поле :attribute не должно содержать более :max цифр.',
|
|
'mimes' => 'Поле :attribute должно быть файлом одного из типов: :values.',
|
|
'mimetypes' => 'Поле :attribute должно быть файлом одного из типов: :values.',
|
|
'min' => [
|
|
'array' => 'Количество элементов в поле :attribute должно быть не меньше :min.',
|
|
'file' => 'Размер файла в поле :attribute должен быть не меньше :min Кбайт.',
|
|
'numeric' => 'Поле :attribute должно быть не меньше :min.',
|
|
'string' => 'Количество символов в поле :attribute должно быть не меньше :min.',
|
|
],
|
|
'min_digits' => 'Поле :attribute должно содержать не менее :min цифр.',
|
|
'missing' => 'Поле :attribute должно отсутствовать.',
|
|
'missing_if' => 'Поле :attribute должно отсутствовать, когда :other равно :value.',
|
|
'missing_unless' => 'Поле :attribute должно отсутствовать, если :other не равно :value.',
|
|
'missing_with' => 'Поле :attribute должно отсутствовать, когда :values присутствует.',
|
|
'missing_with_all' => 'Поле :attribute должно отсутствовать, когда :values присутствуют.',
|
|
'multiple_of' => 'Поле :attribute должно быть кратным :value.',
|
|
'not_in' => 'Выбранное значение для :attribute некорректно.',
|
|
'not_regex' => 'Поле :attribute имеет некорректный формат.',
|
|
'numeric' => 'Поле :attribute должно быть числом.',
|
|
'password' => [
|
|
'letters' => 'Поле :attribute должно содержать хотя бы одну букву.',
|
|
'mixed' => 'Поле :attribute должно содержать буквы верхнего и нижнего регистра.',
|
|
'numbers' => 'Поле :attribute должно содержать хотя бы одну цифру.',
|
|
'symbols' => 'Поле :attribute должно содержать хотя бы один символ.',
|
|
'uncompromised' => 'Указанное значение :attribute было найдено в утечке данных. Пожалуйста, выберите другое значение :attribute.',
|
|
],
|
|
'present' => 'Поле :attribute должно присутствовать.',
|
|
'present_if' => 'Поле :attribute должно присутствовать, когда :other равно :value.',
|
|
'present_unless' => 'Поле :attribute должно присутствовать, если :other не равно :value.',
|
|
'present_with' => 'Поле :attribute должно присутствовать, когда :values присутствует.',
|
|
'present_with_all' => 'Поле :attribute должно присутствовать, когда :values присутствуют.',
|
|
'prohibited' => 'Поле :attribute запрещено.',
|
|
'prohibited_if' => 'Поле :attribute запрещено, когда :other равно :value.',
|
|
'prohibited_unless' => 'Поле :attribute запрещено, если :other не входит в :values.',
|
|
'prohibits' => 'Поле :attribute запрещает присутствие :other.',
|
|
'regex' => 'Поле :attribute имеет некорректный формат.',
|
|
'required' => 'Поле :attribute обязательно для заполнения.',
|
|
'required_array_keys' => 'Поле :attribute должно содержать записи для: :values.',
|
|
'required_if' => 'Поле :attribute обязательно для заполнения, когда :other равно :value.',
|
|
'required_if_accepted' => 'Поле :attribute обязательно для заполнения, когда :other принято.',
|
|
'required_unless' => 'Поле :attribute обязательно для заполнения, когда :other не входит в :values.',
|
|
'required_with' => 'Поле :attribute обязательно для заполнения, когда :values указано.',
|
|
'required_with_all' => 'Поле :attribute обязательно для заполнения, когда :values указаны.',
|
|
'required_without' => 'Поле :attribute обязательно для заполнения, когда :values не указано.',
|
|
'required_without_all' => 'Поле :attribute обязательно для заполнения, когда ни одно из :values не указано.',
|
|
'same' => 'Значение поля :attribute должно совпадать со значением :other.',
|
|
'size' => [
|
|
'array' => 'Количество элементов в поле :attribute должно быть равным :size.',
|
|
'file' => 'Размер файла в поле :attribute должен быть равен :size Кбайт.',
|
|
'numeric' => 'Поле :attribute должно быть равным :size.',
|
|
'string' => 'Количество символов в поле :attribute должно быть равным :size.',
|
|
],
|
|
'starts_with' => 'Поле :attribute должно начинаться с одного из следующих значений: :values.',
|
|
'string' => 'Поле :attribute должно быть строкой.',
|
|
'timezone' => 'Поле :attribute должно содержать корректную временную зону.',
|
|
'unique' => 'Такое значение поля :attribute уже существует.',
|
|
'uploaded' => 'Загрузка поля :attribute не удалась.',
|
|
'uppercase' => 'Поле :attribute должно быть в верхнем регистре.',
|
|
'url' => 'Поле :attribute должно содержать корректный URL.',
|
|
'ulid' => 'Поле :attribute должно содержать корректный ULID.',
|
|
'uuid' => 'Поле :attribute должно содержать корректный UUID.',
|
|
|
|
/*
|
|
| Кастомные сообщения для конкретных пар «атрибут.правило».
|
|
*/
|
|
'custom' => [
|
|
'attribute-name' => [
|
|
'rule-name' => 'custom-message',
|
|
],
|
|
],
|
|
|
|
/*
|
|
| Человекочитаемые имена полей (вместо сырых first_name и т.п.).
|
|
*/
|
|
'attributes' => [
|
|
'first_name' => 'Имя',
|
|
'last_name' => 'Фамилия',
|
|
'name' => 'Название',
|
|
'email' => 'Email',
|
|
'phone' => 'Телефон',
|
|
'password' => 'Пароль',
|
|
'password_confirmation' => 'Подтверждение пароля',
|
|
'timezone' => 'Тайм-зона',
|
|
'comment' => 'Комментарий',
|
|
'daily_limit' => 'Лимит лидов в день',
|
|
'signal_identifier' => 'Источник',
|
|
'signal_type' => 'Тип',
|
|
'sms_senders' => 'Отправители',
|
|
'sms_keyword' => 'Ключевое слово',
|
|
'regions' => 'Регионы',
|
|
'inn' => 'ИНН',
|
|
'kpp' => 'КПП',
|
|
'ogrn' => 'ОГРН',
|
|
'ogrnip' => 'ОГРНИП',
|
|
'legal_address' => 'Юридический адрес',
|
|
'organization_name' => 'Название организации',
|
|
'contact_name' => 'Контактное имя',
|
|
'contact_phone' => 'Контактный телефон',
|
|
'bank_name' => 'Наименование банка',
|
|
'bik' => 'БИК',
|
|
'account_number' => 'Расчётный счёт',
|
|
'corr_account' => 'Корреспондентский счёт',
|
|
'message' => 'Сообщение',
|
|
'contact' => 'Контакт',
|
|
],
|
|
];
|