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
相关产品推荐
相关产品推荐

