Skip to content

自定义语言文件 ​

所有错误文本都可以替换为自己的 —— 就像 Laravel 的语言文件:把文件复制到项目中,修改后加载即可。

1. 复制语言文件 ​

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|character|characters} 这类复数形式使用的语言。如果只需修改少数文本,不需要整个文件 —— 用这些键调用 setMessages 即可。

3. 加载 ​

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

setMessages(messages);

在应用启动时调用一次。如果有多种语言且语言取决于请求,请把文件传给调用本身:validate(schema, data, { messages })。

特定字段的文本 ​

除了代码之外,语言文件还可以包含“字段.代码”形式的键 —— 类似 Laravel 的 custom。数组元素用 * 代替索引:

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

文本优先级:Schema 中的信息 → “字段.代码” → 代码。每一步都先查看调用的 messages 选项,再查看 setMessages。

字段名称 ​

通过 setLabels 为整个应用设置 {label} 的名称 —— 类似 Laravel 的 attributes:

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

另请参阅 ​