uniapp多语言切换 this.$t('') 报错如何解决?

在uniapp中使用多语言切换时,调用this.$t(’’)方法报错,提示"$t is not a function"。已按照官方文档配置了i18n,在main.js中引入了vue-i18n并初始化,但在页面中调用this.$t()仍然报错。请问这是什么原因导致的?需要检查哪些配置或代码?

2 回复

检查是否已正确配置i18n插件,确保在main.js中引入并挂载。确认语言文件路径正确,且已定义对应翻译键值。若使用vue-i18n,需在页面中通过this.$t调用。


在uni-app中,this.$t('') 报错通常是因为未正确配置或引入国际化插件。以下是常见原因及解决方案:


1. 检查是否安装并配置了国际化插件

  • 确保项目中已安装 vue-i18n(uni-app官方推荐):
    npm install vue-i18n
    

2. 正确配置 vue-i18n

  • main.js 中配置:
    import { createApp } from 'vue'
    import App from './App.vue'
    import { createI18n } from 'vue-i18n'
    
    // 准备语言包
    const messages = {
      en: { hello: 'Hello!' },
      zh: { hello: '你好!' }
    }
    
    const i18n = createI18n({
      locale: 'zh', // 默认语言
      messages
    })
    
    const app = createApp(App)
    app.use(i18n)
    app.mount('#app')
    

3. 在页面/组件中使用 $t

  • 确保在 Vue 3 组合式 API 中通过 useI18n 调用:
    <template>
      <view>{{ t('hello') }}</view>
    </template>
    
    <script setup>
    import { useI18n } from 'vue-i18n'
    const { t } = useI18n()
    </script>
    
  • 选项式 API 中可直接用 this.$t(需确保已挂载到 Vue 实例)。

4. 检查语言包路径或键名是否正确

  • 如果 $t('key') 中的 key 在语言包中不存在,会报错。确认语言包结构:
    {
      "en": {
        "hello": "Hello World"
      }
    }
    

5. HBuilderX 项目特殊处理

  • 如使用 HBuilderX 创建的项目,需在 manifest.json 中开启国际化
    {
      "vueVersion": "3",
      "uni-app": {
        "i18n": true
      }
    }
    

6. 重启开发服务器

  • 修改配置后,重启服务(如 npm run dev)确保配置生效。

常见错误场景:

  • 未注入 i18n 实例:检查 main.js 是否正确调用 app.use(i18n)
  • 拼写错误:确认 $t 不是 $Tt
  • 语言包未加载:动态导入语言包时需确保异步加载完成。

按以上步骤排查后,this.$t('') 即可正常使用。如问题仍存在,请提供具体报错信息进一步分析。

回到顶部