You need to enable JavaScript to run this app. vue-i18n配置默认语言为de时Nuxt Generate多语言站点生成报错
优惠活动
大模型
产品
解决方案
定价
更多

vue-i18n配置默认语言为de时Nuxt Generate多语言站点生成报错

问题现象
  • 搭建支持德语(de)、英语(en)的双语Nuxt站点,执行nuxt generate做静态生成时,仅当defaultLocale设为'de'时触发报错:ERROR Error generating route "/de": This page could not be found;将defaultLocale切换为'en'时,静态生成流程可完全正常运行
  • 生成的静态产物结构存在明显差异:
    • 默认语言为'en'时,无重复冗余路径:根目录存放英语默认语言页面,/de目录下存放德语页面,不会额外生成/en目录
    • 默认语言为'de'时,除根目录存放德语默认语言页面、/en目录下存放英语页面外,还会额外尝试生成/de目录的同内容页面,最终触发路径找不到的错误
核心问题逻辑

静态生成阶段错误地把默认语言的带前缀路径当成了有效待渲染路由。
按照Nuxt i18n最常用的prefix_except_default路由策略:

  • 默认语言的页面对应无路径前缀的根路由(即/)
  • 非默认语言的页面才会带上对应语言前缀(比如英语路径是/en、德语路径是/de)
    当默认语言设置为de时,/de这个路径本身没有任何路由匹配规则,如果生成流程强行要渲染这个不存在的路径,就会直接抛出“页面无法找到”的错误。
常见触发场景与修复方案
  • 手动配置了静态生成路由列表
    检查nuxt.config中generate.routes字段,如果之前调试en为默认语言时,手动把/de加入了预渲染路由数组,切换默认语言为de后没有删除这条配置,就会触发该错误。
    修复:删除generate.routes中手动添加的/de路径,默认语言的带前缀路径不需要手动加入预渲染列表。
  • i18n模块的自定义路由映射未同步调整
    检查i18n配置块下的pages字段,这个字段是用来给嵌套路由自定义语言路径规则的。如果之前en为默认语言时,配置了'pages/index.vue': { en: '/', de: '/de' },切换默认语言为de时没有同步调整映射规则(应修改为{ de: '/', en: '/en' }),模块就会按照旧的映射规则尝试生成/de路径的页面,因为该路径没有对应路由匹配规则而报错。
    修复:同步调整自定义路由映射的路径规则,让默认语言对应根路径、非默认语言带对应前缀。
  • 第三方预渲染/站点地图模块抓取到无效链接
    如果安装了@nuxtjs/sitemap、nuxt-payload-extractor这类会自动爬取页面链接做预渲染的模块,只要页面上存在硬编码指向/de的链接(哪怕逻辑上这个链接是无效的,因为de是默认语言,对应路径应该是/),模块就会把/de当成待生成的有效路由加入生成列表。
    修复:所有站点内的语言跳转链接统一使用Nuxt i18n提供的localePath方法生成,不要手动硬编码带语言前缀的路径,从源头避免无效链接被预渲染模块抓取。
  • 本地缓存导致的路由规则残留
    Nuxt和i18n模块会缓存之前的路由生成规则,当你把默认语言从en切到de时,缓存里残留的旧规则可能会把默认语言对应的带前缀路径加入生成列表。
    修复:删除项目目录下的.nuxt、node_modules/.cache文件夹,清除所有本地缓存后重新执行nuxt generate即可。
  • i18n模块版本兼容问题
    Nuxt 2对应版本的@nuxtjs/i18n在7.0.2之前存在已知bug:当切换默认语言配置时,模块会错误地把默认语言也纳入带前缀的路由生成逻辑。
    修复:升级@nuxtjs/i18n到匹配Nuxt版本的最新稳定版即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 11:54:03