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

Vue3搭配自定义路由时vue-i18n报hasOwnProperty相关错误如何解决

问题原因

你当前使用的是适配Vue 3的vue-i18n v9及以上版本,该版本的注册API和Vue 2对应的vue-i18n v8及更低版本完全不同。你沿用了旧版本的注册写法,没有先创建i18n实例就直接传入配置注册,才会触发属性读取错误。

正确修改步骤
  1. 调整导入语句,从vue-i18n中引入createI18n方法
  2. 先创建i18n实例并传入你的本地化配置
  3. 将i18n实例注册到vue应用中

修改后完整代码如下:

import { createApp, h } from 'vue'
import routes from './routes'
// 调整导入,引入createI18n方法
import { createI18n } from 'vue-i18n'
import de from './locale/de';
import en from './locale/en';

const SimpleRouter = {
    data: () => ({
        currentRoute: window.location.pathname
    }),

    computed: {
      ViewComponent () {
        const matchingPage = routes[this.currentRoute] || '404'
        return require(`./pages/${matchingPage}.vue`).default
      }
    },
  
    render () {
      return h(this.ViewComponent)
    },
  
    created () {
      window.addEventListener('popstate', () => {
        this.currentRoute = window.location.pathname
      })
    }
}

// 先创建i18n实例
const i18n = createI18n({
  locale: 'de',
  messages: {
      de,
      en
  },
  // 如果你在组件中使用Composition API,需设置legacy: false
  // 如果仅使用Options API的$t写法,可以去掉该配置或设为true
  legacy: false
})

var app = createApp(SimpleRouter)
// 直接注册i18n实例即可
app.use(i18n)
app.mount('#app')
之前写法不生效的原因
  • 第一种createApp({SimpleRouter, i18n})写法错误:createApp的第一个参数是根组件配置对象,不能直接传入i18n实例
  • 第二种把i18n挂到SimpleRouter选项的写法是Vue 2的旧用法,Vue 3的全局插件统一通过app.use()注册生效,不需要挂载到根组件选项上

修改完成后即可正常使用i18n能力,Options API用$t('xxx')调用,Composition API用const { t } = useI18n()调用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:02