You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3+vue-i18n v9无法获取完整翻译对象的问题咨询

解决Vue3+vue-i18n v9无法通过$t获取嵌套翻译对象的问题

在vue-i18n v9的Composition API模式(即配置legacy: false)下,$t方法的设计目标是获取最终的字符串翻译值,不再支持直接返回嵌套的对象节点。这就是为什么你调用this.$t('parent')时会返回key字符串并触发警告,而this.$t('parent.child1')能正常获取字符串值。

解决方案

1. 直接访问messages对象获取嵌套节点

如果你需要获取整个parent对象,可以直接通过i18n实例的messages属性访问:

Options API 写法

// 在组件的methods或computed中
getParentObj() {
  const currentLocale = this.$i18n.locale.value
  return this.$i18n.messages.value[currentLocale].parent
}

Composition API 写法

import { useI18n } from 'vue-i18n'

export default {
  setup() {
    const { locale, messages } = useI18n()
    const parentObj = messages.value[locale.value].parent
    return { parentObj }
  }
}

2. 开启legacy模式(不推荐)

如果你希望保持Vue2+vue-i18n的行为,可以将legacy设置为true,但这会切换到Options API模式,可能影响其他Composition API的使用:
修改i18n.js:

const i18n = createI18n({
    locale: 'en',
    legacy: true, // 改为true
    messages: { en }
})

此时this.$t('parent')会返回完整的parent对象,但不建议在Vue3项目中长期使用这种方式,因为legacy模式是为了兼容旧代码,后续可能被废弃。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:14:54