Skip to content

Свой lang-файл ​

Все тексты ошибок можно заменить своими — так же, как lang-файлы в Laravel: скопировать файл в проект, поправить и подключить.

1. Скопировать lang-файл ​

bash
npx tinyval lang ru

Команда создаст lang/tinyval/ru.ts со всеми текстами. Доступны en, ru, zh.

ОпцияЧто делает
--out <папка>Куда положить файл. По умолчанию lang/tinyval
--jsСоздать .js вместо .ts
--forceПерезаписать существующий файл

2. Поправить тексты ​

ts
// 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. Подключить ​

ts
import { setMessages } from 'tinyval';
import messages from './lang/tinyval/ru';

setMessages(messages);

Один раз при старте приложения. Если языков несколько и язык зависит от запроса — передавайте файл в сам вызов: validate(schema, data, { messages }).

Тексты для конкретных полей ​

Кроме кодов, в lang-файле могут быть ключи «поле.код» — как custom в Laravel. Для элементов массива вместо индекса пишется *:

ts
export default {
  ...ru,
  'email.required': 'Укажите почту — на неё придёт письмо',
  'password.minLength': 'Пароль слишком простой',
  'items.*.qty.min': 'Количество — от {min}',
} satisfies Messages;

Порядок выбора текста: сообщение в самой схеме → «поле.код» → код. На каждом шаге сначала смотрится опция messages вызова, потом setMessages.

Названия полей ​

Названия для {label} задаются для всего приложения через setLabels — как attributes в Laravel:

ts
setLabels({ email: 'Почта', 'items.*.qty': 'Количество' });

См. также ​