跳转到内容

国际化

组件的内建文案(关闭钮的读屏名、分页的翻页说明、上传区的提示这类)默认是英文,日期时间系组件另收一个 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-CNen-US),驱动 Intl 的月份、星期与段位顺序;time 收内建的 'zh-CN' | 'en' 两套用词。实例上显式给过 locale 的不受全局影响。

作用域与边界

  • 注入走 Vue 的 provide/inject:在应用根 provide 就是全应用默认,也可以只在某个子树 provide 给局部换语言。
  • createToastService / createDialogService 自带宿主应用,接不到组件树里的注入;它们的文案走各自创建时的选项(translations / okText / cancelText)。
  • 不注入时组件走原路,没有任何额外开销。

Released under The MIT License