添加自定义语言包指南
版本: v2.0.0-beta.1
最后更新: 2026-04-30
📖 概述
本指南将教你如何为 schema-dsl 添加自定义语言包或扩展现有语言。
Node.js 要求:
>=18.0.0目录加载(Node >=18)默认支持的语言文件格式:
.js(CommonJS)、.cjs、.json、.jsonc、.json5。
推荐:如果你的应用是type: module/ ESM 项目,优先使用.cjs、.json、.jsonc、.json5。
🏗️ 多人协作:子目录拆分语言包(v1.2.3 新增)⭐
适用场景:多人/多模块开发,避免所有语言 key 堆在同一文件产生 Git 冲突和 code 码冲突。
目录结构
每个模块独立维护自己的语言文件
应用启动:一行配置,自动递归合并
- 子目录名(
account/、order/)仅作为模块组织层,不影响最终语言 key 命名- 加载顺序:按文件系统字母序递归扫描
- 同语言 key 出现重复时:默认打
WARN日志,可开启严格模式阻断启动
严格模式:key 冲突时阻断启动(推荐 CI 环境)
Code 段划分建议
多人开发时建议在项目根目录维护一份 locales/CODE-SEGMENTS.md,约定各模块的 code 号段:
CODE-SEGMENTS.md/CODE-SEGMENTS.js等非语言文件会被自动跳过,无需担心被误加载。
🚀 快速开始
推荐方式:配置语言包目录(一次性加载所有语言)⭐
正确的使用方式:在应用启动时一次性加载所有语言包,运行时直接切换。
第1步:创建语言包文件
第1步:创建语言包文件
第2步:定义语言包(locales/pt-BR.json5)
第3步:应用启动时一次性加载所有语言
语言包合并策略
方式2:直接传入对象(适合动态配置)
⚠️ 错误示例(不推荐)
❌ 错误:运行时单个加载语言包
为什么推荐"首次加载,运行时切换"?
🎯 完整示例
📋 完整的消息键列表
通用键
字符串验证键
数字验证键
格式验证键
自定义模式键
🎨 模板变量
所有错误消息支持以下模板变量:
📚 参考内置语言包
你可以参考内置的语言包作为模板:
或者直接查看源码:
- 中文:
src/locales/zh-CN.ts - 英文:
src/locales/en-US.ts - 日语:
src/locales/ja-JP.ts - 西班牙语:
src/locales/es-ES.ts - 法语:
src/locales/fr-FR.ts
✅ 最佳实践
- 完整性:确保翻译所有常用的错误消息键
- 一致性:保持错误消息风格统一
- 模板变量:正确使用
{{#label}}、{{#limit}}等变量 - 测试:添加语言包后进行测试,确保所有消息正确显示
- 文档:为自定义语言包编写使用说明
🤝 贡献语言包
如果你为 schema-dsl 添加了新语言包,欢迎提交 Pull Request:
- Fork 项目
- 在
src/locales/目录创建新语言文件(如pt-BR.ts) - 完整翻译所有消息键
- 在
src/locales/index.ts中注册新语言 - 添加测试用例(在
test/unit/locales/目录) - 提交 Pull Request
📞 支持
如果你在添加语言包时遇到问题:
- 查看 多语言配置指南
- 查看 动态多语言配置指南
- 提交 Issue: https://github.com/vextjs/schema-dsl/issues
对应示例文件
示例入口: add-custom-locale.ts
说明: 覆盖 Locale.addLocale() 注册新语言、读取消息文本,以及在自定义 locale 下执行验证的最小工作流。