Свой lang-файл
Все тексты ошибок можно заменить своими — так же, как lang-файлы в Laravel: скопировать файл в проект, поправить и подключить.
1. Скопировать lang-файл
npx tinyval lang ruКоманда создаст lang/tinyval/ru.ts со всеми текстами. Доступны en, ru, zh.
| Опция | Что делает |
|---|---|
--out <папка> | Куда положить файл. По умолчанию lang/tinyval |
--js | Создать .js вместо .ts |
--force | Перезаписать существующий файл |
2. Поправить тексты
// lang/tinyval/ru.ts
import type { Messages } from 'tinyval';
export default {
required: 'Поле «{label}» обязательно',
minLength: '{label}: минимум {min} символов',
email: 'Проверьте адрес почты',
// ...
} satisfies Messages;satisfies Messages — TypeScript проверит, что в файле есть все коды ошибок, и подскажет их названия. Ключ $locale ('ru', 'en'…) задаёт язык для склонений вроде {min|символ|символа|символов}. Если нужно поменять только несколько текстов, файл не нужен целиком — достаточно setMessages с этими ключами.
3. Подключить
import { setMessages } from 'tinyval';
import messages from './lang/tinyval/ru';
setMessages(messages);Один раз при старте приложения. Если языков несколько и язык зависит от запроса — передавайте файл в сам вызов: validate(schema, data, { messages }).
Тексты для конкретных полей
Кроме кодов, в lang-файле могут быть ключи «поле.код» — как custom в Laravel. Для элементов массива вместо индекса пишется *:
export default {
...ru,
'email.required': 'Укажите почту — на неё придёт письмо',
'password.minLength': 'Пароль слишком простой',
'items.*.qty.min': 'Количество — от {min}',
} satisfies Messages;Порядок выбора текста: сообщение в самой схеме → «поле.код» → код. На каждом шаге сначала смотрится опция messages вызова, потом setMessages.
Названия полей
Названия для {label} задаются для всего приложения через setLabels — как attributes в Laravel:
setLabels({ email: 'Почта', 'items.*.qty': 'Количество' });См. также
- Сообщения и локализация — все коды ошибок
- setMessages, setLabels