国际化
组件的内建文案(关闭钮的读屏名、分页的翻页说明、上传区的提示这类)默认是英文,日期时间系组件另收一个 locale。两者都能在应用级配置一次,不必逐实例传。
全局注入一次
ts
import { provideXhConfig } from '@xihan-ui/vue'
// 应用根组件的 setup 里
provideXhConfig({
locale: 'zh-CN',
translations: {
breadcrumb: { root: '面包屑' },
pagination: { root: '分页', prevTrigger: '上一页', nextTrigger: '下一页' },
dialog: { close: '关闭' },
toast: { close: '关闭' },
},
})取值优先级从高到低:实例 props → 全局注入 → 组件内建默认(英文)。translations 按键合并——全局给整包、个别实例只覆盖要改的那一个键即可。
运行时切语言
传 ref 或 getter,切换时用到这些文案的组件跟着重渲:
ts
import { computed, ref } from 'vue'
import { provideXhConfig } from '@xihan-ui/vue'
import { zhCN, enUS } from './locales'
const lang = ref<'zh' | 'en'>('zh')
provideXhConfig(computed(() => (lang.value === 'zh' ? zhCN : enUS)))语言包就是一个普通对象(XhConfig 类型),按组件名收纳各自的 Translations;每个组件页的 Props 表里列有它的文案键。
locale 收在哪些组件
locale 喂给日期时间系组件:calendar / date-picker / date-field / time-picker / time-field 收 BCP 47 语言标记(如 zh-CN、en-US),驱动 Intl 的月份、星期与段位顺序;time 收内建的 'zh-CN' | 'en' 两套用词。实例上显式给过 locale 的不受全局影响。
作用域与边界
- 注入走 Vue 的 provide/inject:在应用根 provide 就是全应用默认,也可以只在某个子树 provide 给局部换语言。
createToastService/createDialogService自带宿主应用,接不到组件树里的注入;它们的文案走各自创建时的选项(translations/okText/cancelText)。- 不注入时组件走原路,没有任何额外开销。
