核心是让locale和语言包均为响应式:locale用ref/reactive,语言包也需ref包裹,computed返回当前语言对象或翻译函数(如t.value('key')),支持异步加载、多层兜底(当前语言→中文→key)及组合式复用。

用 computed 绑定 locale 和语言包
核心是让语言切换真正响应式。locale 必须是 ref 或 reactive,语言包也得是响应式对象,不能写死在 computed 里。比如:
- 定义
const locale = ref('zh')和const messages = ref({ zh: { login: '登录' }, en: { login: 'Login' } }) - 用
const lang = computed(() => messages.value[locale.value] || messages.value.zh) - 模板中直接写
{{ lang.login }},改 locale 就自动刷新所有文案
封装翻译函数提升灵活性
避免为每个字段都写一个计算属性,返回一个带 .value 的翻译函数更实用:
const t = computed(() => (key) => messages.value?.[locale.value]?.[key] || key)- 模板调用:
{{ t.value('welcome') }} - 支持动态键名、运行时拼接,比如
{{ t.value(`error.${errorCode}`) }}
处理异步加载和兜底逻辑
语言包常从文件或接口异步加载,同时要防缺失键导致空白:
- 加载后赋值给
messages.value,computed 会自动重算 - 兜底推荐两层:先试当前语言,再 fallback 到中文,最后返回 key 本身:
messages.value?.[locale.value]?.[key] || messages.value?.zh?.[key] || key - 不要用普通对象包装语言包,否则 Vue 无法追踪变化
按功能拆分组合函数复用逻辑
国际化不是孤立模块,它常和用户设置、持久化、事件监听耦合:
- 抽成
useI18n()组合函数,内部管理 locale、加载、存储(如 localStorage)、监听系统语言变化 - 返回
{ locale, lang, t, setLocale, loadLocale }等明确 API - 多个组件调用各自独立的实例,互不干扰,也不污染全局
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










