【发布时间】:2021-09-10 07:07:27
【问题描述】:
我使用带有 Nuxt 和 i18n 的 Strapi 来生成一个英语和丹麦语的静态站点。 该网站应该能够生成如下 URL:
mysite.com/
mysite.com/da
mysite.com/news/a-story
mysite.com/da/nyheder/en-historie
mysite.com/cases/a-case
mysite.com/da/case/en-case
我有一个这样的页面文件夹结构
_cases
_slug.vue <-- for case pages
_news
_slug.vue <-- for news pages
_slug.vue <-- for other pages
index.vue <-- for my frontpage
我使用以下代码列出呈现良好的漂亮 URL 的链接
h2 case
router-link(:to="localePath({ name: 'cases-slug', params: { cases: $t('slugs.cases'), slug: aCasePage.slug }})") {{aCasePage.title}}
h2 news
router-link(:to="localePath({ name: 'news-slug', params: { news: $t('slugs.news'), slug: aNewsPage.slug }})") {{aNewsPage.title}}
问题是,无论我点击进入新闻页面还是案例页面,都会得到相同的 _cases -> _slug.vue 组件。
查看 .nuxt/router.js 文件,路由似乎生成正确:
routes: [{
path: "/da",
component: _1ea75fec,
name: "index___da"
}, {
path: "/da/:slug",
component: _2214a27c,
name: "slug___da"
}, {
path: "/da/:cases/:slug?",
component: _3a25cd77,
name: "cases-slug___da"
}, {
path: "/da/:news/:slug?",
component: _3988eeb6,
name: "news-slug___da"
}, {
path: "/",
component: _1ea75fec,
name: "index___en"
}, {
path: "/:slug",
component: _2214a27c,
name: "slug___en"
}, {
path: "/:cases/:slug?",
component: _3a25cd77,
name: "cases-slug___en"
}, {
path: "/:news/:slug?",
component: _3988eeb6,
name: "news-slug___en"
}],
如何避免 Nuxt 混淆这些路由?以及与它们匹配的页面 Vue 组件?
【问题讨论】:
-
有一刻我认为 localePath() 可以替换为 localeRoute() 然后它按预期工作。但很可惜,它只适用于 nuxt dev。在 nuxt 生成后,它不再起作用了。我相信这是 nuxt/i18n (v 6.27.2) 中的一个错误,但我不确定。文档可在此处找到:i18n.nuxtjs.org/basic-usage
标签: internationalization nuxt.js server-side-rendering strapi