Skip to content

国际化配置

Moongate Vue 内置了中英双语的文案系统,无需引入任何额外依赖。所有组件的内置展示文案(空状态、校验中、分页按钮、关闭按钮等)都会根据语言自动切换。

语言检测机制

组件库仅支持中英双语,检测规则为简单的二选一:

  • document.documentElement.langzh 开头(如 zh-CNzh-TWzh-Hans)→ 中文
  • 其他任何情况(enen-USfrja、空、未设置)→ 英文(默认)
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' } })
// 此时:英文 + 覆盖 empty

resetConfig()

清除所有自定义配置,恢复默认语言检测逻辑:

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
tableSelectAllTable 全选 aria-label全选Select all
tableSelectRowTable 行选择模板({label}选择Select
tableRowLabelTable 行标签兜底Row
modalCloseModal 关闭按钮 aria-label关闭Close
drawerCloseDrawer 关闭按钮 aria-label关闭抽屉Close drawer
messageCloseMessage 关闭按钮 aria-label关闭消息Close message
toastCloseToast 关闭按钮 aria-label关闭通知Close notification
formRuleMessageuseForm 默认校验失败文案校验未通过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 优先
PaginationpaginationPrev paginationNext paginationFirst paginationLast paginationPageInfofirst-text prev-text next-text last-text
Selectempty selectRemoveempty-text
Tableempty tableSelectAll tableSelectRow tableRowLabelempty-text select-all-text
FormItemvalidatingvalidating-text
ModalmodalCloseclose-aria-label
DrawerdrawerCloseclose-aria-label
MessagemessageCloseclose-aria-label
ToasttoastCloseclose-aria-label
useFormformRuleMessageruleMessage 选项

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 时使用全局默认文案。

Released under the MIT License