多语言配置指南
📚 多语言文档导航
根据你的需求选择合适的文档:
- 🚀 新手快速上手: i18n.md(当前文档)- 5分钟学会基础用法
- 📖 完整使用指南: i18n-user-guide.md - 详细的用户指南和最佳实践
- 🎯 添加新语言: add-custom-locale.md - 添加自定义语言包教程
- 🔄 动态切换语言: dynamic-locale.md - API开发中的动态语言切换
- 🌐 前端集成: frontend-i18n-guide.md - 前后端分离项目集成指南
📖 概述
schema-dsl 支持完整的多语言功能,允许你自定义字段标签和错误消息的翻译。
Node.js 要求:
>=18.0.0
目录加载(Node >=18)默认支持的语言文件格式:
.js(CommonJS 语言包).cjs.json.jsonc.json5
推荐:如果你的应用是
type: module/ ESM 项目,优先使用.cjs、.json、.jsonc、.json5;.js更适合 CommonJS 语言包文件。
v2 当前能力:
- ✅ 支持参数化语言切换(无需修改全局状态)
- ✅ 支持自定义错误消息(三种格式)
- ✅ TypeScript 类型定义完整
- ✅ 目录递归加载
.js/.cjs/.json/.jsonc/.json5
🚀 快速开始
方式1:验证时动态指定语言(推荐)⭐
方式2:使用全局配置(向后兼容)
📝 内置语言支持
schema-dsl 内置了以下语言包:
🎯 高级用法
基础配置
目录加载为了兼容默认保留
.js/.cjs支持。这些文件会被 Node 执行,因此只应来自可信 locale 目录;如果目录不可信,设置codeLocaleFiles: 'deny',仅加载.json、.jsonc、.json5。
目录结构
📝 语言包格式
完整示例 (i18n/dsl/zh-CN.cjs)
🎯 使用方法
1. 字段标签翻译
2. 覆盖默认错误消息
3. 自定义错误消息
4. 动态语言切换
📋 内置错误消息键
通用错误
String 错误
Number 错误
Boolean 错误
Array 错误
Format 错误
Pattern 错误
完整列表请参考: src/locales/zh-CN.ts
🔧 高级用法
嵌套字段标签
错误消息优先级
- 字段级自定义消息 -
.messages()方法 - Schema级标签 -
.label()方法 - 语言包自定义消息 -
i18n配置 - 默认错误消息 - 内置语言包
多语言最佳实践
1. 目录结构
2. 导出工具 (i18n/dsl/index.js)
3. 消息复用
📊 完整示例
用户管理系统
🐛 常见问题
1. 语言包不生效?
先检查这些常见原因:
- 配置键应为
i18n,不是locales。 - 目录路径应指向实际存放语言包文件的目录。
- 文件名应是 locale code,例如
zh-CN.cjs或zh-CN.jsonc。 .js语言包应使用 CommonJS(module.exports)。ESM 项目优先使用.cjs或.json*。
2. 错误消息仍然是英文?
原因: 当前请求没有显式传入 locale,或全局默认语言尚未切到你期望的语言
3. 自定义消息不显示?
检查优先级:
.messages()s(>).label()> 语言包 > 默认
📚 相关文档
对应示例文件
示例入口: i18n.ts
说明: 覆盖内置 locale 切换、字段级消息优先级,以及自定义 locale 的最小工作路径。