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

Nuxt3 + @nuxt/content按Locale查询致默认路由失效问题求助

解决Nuxt3中@nuxt/content多语言站点根路由回退到index.md失效的问题

你的问题根源在于路径计算逻辑错误,以及未正确处理动态路由参数。当访问根路径/时,当前代码无法精准匹配到index.md,导致ContentDoc错误加载了foo.md。

修正步骤及代码

  1. 移除不必要的@nuxtjs/composition-api依赖:Nuxt3已内置useI18n和useRoute,无需额外导入。
  2. 基于动态路由参数slug计算文档路径,而非直接替换URL路径:
<template>
  <div>
    <pre>
    current locale: {{ locale }} 
    current doc path: {{ docPath }}
    </pre>
    <ContentDoc :query="{ path: docPath, where: { _locale: locale } }" />
  </div>
</template>

<script setup>
const { locale } = useI18n()
const route = useRoute()

// 根据动态路由参数生成文档路径,空路由对应index.md
const docPath = computed(() => {
  const slug = route.params.slug || []
  return slug.length > 0 ? `/${slug.join('/')}` : '/'
})
</script>

关键说明

  • [...slug].vue是捕获所有路由的动态页面,访问根路径/时,route.params.slug为空数组,此时我们将docPath设为/,对应content目录下的index.md。
  • 当访问/foo或/it/foo时,slug会被解析为['foo'],拼接后路径为/foo,正确匹配对应语言的foo.md。

补充配置检查

确保nuxt.config.ts中i18n和content模块的配置正确:

export default defineNuxtConfig({
  modules: ['@nuxt/content', '@nuxtjs/i18n'],
  i18n: {
    locales: ['en', 'it'],
    defaultLocale: 'en',
    strategy: 'prefix_except_default' // 默认语言不带前缀
  },
  content: {
    locales: ['en', 'it'],
    defaultLocale: 'en'
  }
})

配置完成后,访问/会加载对应默认语言的index.md,访问/it加载意大利语的index.md,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:05:18