@xwink/ui

useUiLocale

组件库的文案出口。当前全站单语言,不引入 i18n 框架,但按可国际化的结构预留:组件模板与逻辑里 不写面向用户的字面量,要么来自 props / slots,要么来自这里。

ts
import { useUiLocale } from '@xwink/ui'

const messages = useUiLocale()
const m = computed(() => messages.value.profileMenu)

默认文案是 zhCNUiMessages 类型)。取值走 computed,因为宿主 provide 的可以是响应式的。

整套替换

ts
import { provideUiLocale, zhCN } from '@xwink/ui'

// app 级 provide:传 ref / getter 都可以,将来接真 i18n 时换成翻译结果即可,组件零改动
provideUiLocale(() => ({ ...zhCN, profileMenu: { ...zhCN.profileMenu, logout: '退出' } }))

没有 provide 时组件回落 zhCN,所以宿主不接也能正常渲染。

为什么不直接内联文案

内联的字面量散在几十个 SFC 里,接 i18n 那天要逐个改;而集中在一处的代价只是多一次 computed。 日期与数字同理:用 Intl API 并从 locale 取地区参数,不手写格式化字符串。