国际化
为用户提供其母语的错误信息可以改善用户体验并提高软件的采用率。因此,我们提供了几种灵活的方式来轻松实现 i18n(国际化)。
官方翻译
开始使用 i18n 最快的方式是使用 Valibot 的官方翻译。它们在一个名为 @valibot/i18n 的独立包中提供。
如果你发现缺少某个翻译,请随时在 GitHub 上 提交一个 issue 或 pull request。
导入翻译
此包中的每个翻译都是模块化实现的,并作为子模块导出。这使得你可以只导入你实际需要的翻译,以保持打包体积小。
// 导入所有翻译(不推荐)
import '@valibot/i18n';
// 导入特定语言的所有翻译
import '@valibot/i18n/de';
// 仅导入模式函数的翻译
import '@valibot/i18n/de/schema';
// 仅导入特定管道函数的翻译
import '@valibot/i18n/de/minLength';
这些子模块利用 sideeffects 将翻译加载到一个全局存储中,模式和验证函数在添加错误信息到问题中时会访问该存储。
选择语言
使用的语言是通过 lang 配置项来选择的。你可以使用 setGlobalConfig 进行全局设置,也可以在通过 parse 或 safeParse 解析未知数据时进行本地设置。
import * as v from 'valibot';
// 全局设置语言配置
v.setGlobalConfig({ lang: 'de' });
// 本地设置语言配置
v.parse(Schema, input, { lang: 'de' });
自定义翻译
你可以使用与 @valibot/i18n 相同的 API,将自己的翻译添加到全局存储中。或者,你也可以将它们作为第一个可选参数直接传递给特定的模式或验证函数。
你可以手动输入翻译,也可以使用像
Paraglide JS这样的 i18n 库。
全局设置翻译
你可以使用 setGlobalMessage、setSchemaMessage 和 setSpecificMessage 在三个不同的层级添加翻译。当创建一个问题时,我首先检查是否有特定的翻译可用,然后是模式函数的翻译,最后是全局翻译。
import * as v from 'valibot';
// 全局设置翻译(可用作备用)
v.setGlobalMessage((issue) => `Invalid input: ...`, 'en');
// 为每个模式函数全局设置翻译
v.setSchemaMessage((issue) => `Invalid type: ...`, 'en');
// 为特定函数全局设置翻译
v.setSpecificMessage(v.minLength, (issue) => `Invalid length: ...`, 'en');
本地设置翻译
如果你更喜欢单独定义翻译,可以将它们作为第一个可选参数传递给模式和验证函数。在这种情况下,我们推荐使用像 Paraglide JS 这样的 i18n 库。
import * as v from 'valibot';
import * as m from './paraglide/messages.js';
const LoginSchema = v.object({
email: v.pipe(
v.string(),
v.nonEmpty(m.emailRequired),
v.email(m.emailInvalid)
),
password: v.pipe(
v.string(),
v.nonEmpty(m.passwordRequired),
v.minLength(8, m.passwordInvalid)
),
});