From 127db8b77ab7ee8f0a4852db6f554a91a4cf1a2b Mon Sep 17 00:00:00 2001 From: kayjaydee Date: Wed, 22 Apr 2026 00:20:52 +0200 Subject: [PATCH] feat(blog): add dynamic blog post rendering with i18n support and error handling in [slug].vue --- app/pages/blog/{[...slug].vue => [slug].vue} | 8 ++++---- nuxt.config.ts | 8 +++----- 2 files changed, 7 insertions(+), 9 deletions(-) rename app/pages/blog/{[...slug].vue => [slug].vue} (71%) diff --git a/app/pages/blog/[...slug].vue b/app/pages/blog/[slug].vue similarity index 71% rename from app/pages/blog/[...slug].vue rename to app/pages/blog/[slug].vue index 5c697d7..aeb537b 100644 --- a/app/pages/blog/[...slug].vue +++ b/app/pages/blog/[slug].vue @@ -2,14 +2,14 @@ const { locale } = useI18n() const route = useRoute() -const slug = Array.isArray(route.params.slug) ? route.params.slug.join('/') : route.params.slug +const slug = route.params.slug as string const isFr = locale.value === 'fr' -const collection = isFr ? 'blog_fr' : 'blog_en' -// blog_fr prefix = /fr/blog, blog_en prefix = /en/blog (aligned with content.config.ts) const path = isFr ? `/fr/blog/${slug}` : `/en/blog/${slug}` const { data: page } = await useAsyncData(`blog-${locale.value}-${slug}`, () => - queryCollection(collection).path(path).first() + isFr + ? queryCollection('blog_fr').path(path).first() + : queryCollection('blog_en').path(path).first() ) if (!page.value) { diff --git a/nuxt.config.ts b/nuxt.config.ts index 8698cc3..aa80a2a 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -34,6 +34,7 @@ export default defineNuxtConfig({ i18n: { strategy: 'prefix', defaultLocale: 'fr', + baseUrl: 'https://killiandalcin.fr', locales: [ { code: 'fr', language: 'fr-FR', file: 'fr.json' }, { code: 'en', language: 'en-US', file: 'en.json' }, @@ -42,7 +43,8 @@ export default defineNuxtConfig({ detectBrowserLanguage: { useCookie: true, cookieKey: 'i18n_redirected', - redirectOn: 'root', + redirectOn: 'no prefix', + fallbackLocale: 'fr', }, }, runtimeConfig: { @@ -59,10 +61,6 @@ export default defineNuxtConfig({ gtag: { enabled: !import.meta.dev, }, - routeRules: { - '/blog': { redirect: { to: '/fr/blog', statusCode: 301 } }, - '/blog/**': { redirect: { to: '/fr/blog', statusCode: 301 } }, - }, content: { build: { markdown: {