Nuxt3 + @nuxt/content按Locale查询致默认路由失效问题求助
解决Nuxt3中@nuxt/content多语言站点根路由回退到index.md失效的问题
你的问题根源在于路径计算逻辑错误,以及未正确处理动态路由参数。当访问根路径/时,当前代码无法精准匹配到index.md,导致ContentDoc错误加载了foo.md。
修正步骤及代码
- 移除不必要的
@nuxtjs/composition-api依赖:Nuxt3已内置useI18n和useRoute,无需额外导入。 - 基于动态路由参数
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
相关产品推荐
相关产品推荐

