国际化配置
Moongate Vue 内置了中英双语的文案系统,无需引入任何额外依赖。所有组件的内置展示文案(空状态、校验中、分页按钮、关闭按钮等)都会根据语言自动切换。
语言检测机制
组件库仅支持中英双语,检测规则为简单的二选一:
document.documentElement.lang以zh开头(如zh-CN、zh-TW、zh-Hans)→ 中文- 其他任何情况(
en、en-US、fr、ja、空、未设置)→ 英文(默认)
html
<!-- 英文(默认) -->
<html lang="en"></html>html
<!-- 中文 -->
<html lang="zh-CN"></html>💡 非中文语言一律回退到英文,这是「仅中英双语」设计的刻意简化——英文作为更通用的回退语言。
全局配置 API
setConfig({ locale, texts })
全局设置语言和/或覆盖部分文案,支持多次调用(部分合并):
ts
import { setConfig } from 'moongate-vue'
// 1. 切换为英文内置文案
setConfig({ locale: 'en-US' })
// 2. 仅覆盖部分文案(其余保持语言内置)
setConfig({ texts: { empty: '没有数据', paginationPrev: '上一页' } })
// 3. 同时设置语言和文案覆盖
setConfig({
locale: 'en-US',
texts: { tableSelectAll: 'Check all' },
})
// 4. 多次调用部分合并
setConfig({ locale: 'en-US' })
setConfig({ texts: { empty: 'No results' } })
// 此时:英文 + 覆盖 emptyresetConfig()
清除所有自定义配置,恢复默认语言检测逻辑:
ts
import { resetConfig } from 'moongate-vue'
resetConfig()优先级
组件 prop > setConfig texts > 语言内置文案
| 优先级 | 来源 | 示例 |
|---|---|---|
| 最高 | 组件 prop | <Table empty-text="自定义空状态" /> |
| 中间 | setConfig({ texts }) | setConfig({ texts: { empty: '没有数据' } }) |
| 最低 | 语言内置文案 | en-US → 'No data',zh-CN → '暂无数据' |
配置修改后,已挂载的组件会响应式更新,无需重新渲染。
内置文案字段(LocaleTexts)
| 字段 | 说明 | 中文 | 英文 |
|---|---|---|---|
empty | 空状态(Select / Table) | 暂无数据 | No data |
validating | 校验中(FormItem) | 校验中… | Validating… |
paginationPrev | 分页上一页 | 上一页 | Prev |
paginationNext | 分页下一页 | 下一页 | Next |
paginationFirst | 分页首页 | « | « |
paginationLast | 分页尾页 | » | » |
paginationPageInfo | 页码信息模板({current}/{total}) | 第 {current} 页,共 {total} 页 | Page {current} of |
selectRemove | 移除标签模板({label}) | 移除 | Remove |
tableSelectAll | Table 全选 aria-label | 全选 | Select all |
tableSelectRow | Table 行选择模板({label}) | 选择 | Select |
tableRowLabel | Table 行标签兜底 | 行 | Row |
modalClose | Modal 关闭按钮 aria-label | 关闭 | Close |
drawerClose | Drawer 关闭按钮 aria-label | 关闭抽屉 | Close drawer |
messageClose | Message 关闭按钮 aria-label | 关闭消息 | Close message |
toastClose | Toast 关闭按钮 aria-label | 关闭通知 | Close notification |
formRuleMessage | useForm 默认校验失败文案 | 校验未通过 | Validation failed |
模板占位符
部分字段支持 {key} 占位符,由组件自动替换实际值:
ts
// paginationPageInfo: 'Page {current} of {total}'
// 显示为: Page 3 of 10| 字段 | 占位符 | 使用场景 |
|---|---|---|
paginationPageInfo | {current} {total} | Pagination 页码信息 |
selectRemove | {label} | Select 多选移除标签 |
tableSelectRow | {label} | Table 行选择 aria-label |
组件覆盖对照表
| 组件 | 可覆盖字段 | 组件 prop 优先 |
|---|---|---|
Pagination | paginationPrev paginationNext paginationFirst paginationLast paginationPageInfo | first-text prev-text next-text last-text |
Select | empty selectRemove | empty-text |
Table | empty tableSelectAll tableSelectRow tableRowLabel | empty-text select-all-text |
FormItem | validating | validating-text |
Modal | modalClose | close-aria-label |
Drawer | drawerClose | close-aria-label |
Message | messageClose | close-aria-label |
Toast | toastClose | close-aria-label |
useForm | formRuleMessage | ruleMessage 选项 |
useForm 集成
useForm 的默认校验失败文案(规则返回 false 时)跟随全局语言:
ts
import { useForm } from 'moongate-vue'
// zh-CN: 错误信息为 '校验未通过'
// en-US: 错误信息为 'Validation failed'
const { validate, errors } = useForm({
initialValues: { name: '' },
rules: { name: (v: string) => (v ? true : false) },
})
await validate()
console.log(errors.name) // '校验未通过' 或 'Validation failed'也可通过 ruleMessage 选项自定义(优先级高于全局配置):
ts
const { validate, errors } = useForm({
initialValues: { name: '' },
rules: { name: (v: string) => v.length >= 3 || '用户名至少 3 个字符' },
})💡 规则返回
string时直接作为错误信息;返回false时使用全局默认文案。