Nuxt 3 I18n国际化报错:_ctx.$t is not a function求助
_ctx.$t is not a function错误的可能原因 插件注册不完整或错误
确认nuxt.config.js的modules数组中,@nuxtjs/i18n的拼写完全正确,且数组语法无错误(比如逗号遗漏、括号配对问题)。若为Nuxt 3项目,需确保插件通过modules而非buildModules注册(v8版本已适配Nuxt 3,无需放入buildModules)。语言文件路径/命名/格式错误
- 检查项目根目录是否存在
locales文件夹,内部的en-US.json、es-ES.json文件名需与配置中locales数组的file字段完全匹配(大小写、连字符均要一致)。 - 验证语言文件的JSON格式合法性,比如是否存在逗号遗漏、引号不配对的情况。你提供的
es-ES.json内容为泰语,但格式本身无问题,若实际文件有语法错误会导致加载失败,进而使$t无法正常初始化。
- 检查项目根目录是否存在
懒加载配置路径错误
当lazy: true时,langDir指定的路径必须准确。若locales文件夹不在项目根目录(比如放在assets下),需调整langDir为'assets/locales'这类正确路径。可打开浏览器开发者工具的网络面板,查看页面加载时是否成功请求到对应语言JSON文件,若出现404则说明路径错误。vueI18n实例未正确初始化
取消注释nuxt.config.js中的vueI18n配置块,显式设置fallbackLocale:vueI18n: { fallbackLocale: 'en-US', }虽已设置
defaultLocale,但显式配置vueI18n能确保实例正确创建,避免因默认初始化逻辑异常导致$t无法挂载。缓存或构建残留问题
删除项目根目录下的.nuxt文件夹、node_modules/.cache目录,重新执行npm install和npm run dev,清除旧构建缓存,确保插件被正确编译加载。Nuxt版本与插件兼容性问题
@nuxtjs/i18n v8.x适配Nuxt 2和Nuxt 3,但配置方式略有差异:- 若为Nuxt 3项目,需确保
nuxt.config.js(或nuxt.config.ts)使用defineNuxtConfig包裹配置,格式符合要求。 - 若为Nuxt 2项目,避免混用Nuxt 3的配置语法。
- 若为Nuxt 3项目,需确保
组件使用场景错误
若在Nuxt 3的<script setup>中使用,不能直接调用$t,需通过useI18n()钩子获取翻译函数:<script setup> const { t } = useI18n() </script> <template> <div>{{ t('products_text') }}</div> </template>模板中直接用
$t在Nuxt 3中支持,但脚本内必须使用钩子获取。
内容的提问来源于stack exchange,提问作者Ezzaa Waheed

