From 70f1813e33807639867fa3204a9028f514390442 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Tue, 27 Jan 2026 09:23:15 +0100 Subject: [PATCH] fix 404 --- app/[locale]/products/[...slug]/page.tsx | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/app/[locale]/products/[...slug]/page.tsx b/app/[locale]/products/[...slug]/page.tsx index 9d4e0fb0..e843f373 100644 --- a/app/[locale]/products/[...slug]/page.tsx +++ b/app/[locale]/products/[...slug]/page.tsx @@ -8,7 +8,7 @@ import RelatedProducts from '@/components/RelatedProducts'; import { Badge, Container, Section } from '@/components/ui'; import { getDatasheetPath } from '@/lib/datasheets'; import { getAllProducts, getProductBySlug } from '@/lib/mdx'; -import { mapFileSlugToTranslated } from '@/lib/slugs'; +import { mapFileSlugToTranslated, mapSlugToFileSlug } from '@/lib/slugs'; import { Metadata } from 'next'; import { getTranslations } from 'next-intl/server'; import { MDXRemote } from 'next-mdx-remote/rsc'; @@ -30,9 +30,10 @@ export async function generateMetadata({ params }: ProductPageProps): Promise g[1].toUpperCase()); - const categoryTitle = t.has(`categories.${categoryKey}.title`) ? t(`categories.${categoryKey}.title`) : productSlug; + const fileSlug = await mapSlugToFileSlug(productSlug, locale); + if (categories.includes(fileSlug)) { + const categoryKey = fileSlug.replace(/-cables$/, '').replace(/-([a-z])/g, (g) => g[1].toUpperCase()); + const categoryTitle = t.has(`categories.${categoryKey}.title`) ? t(`categories.${categoryKey}.title`) : fileSlug; const categoryDesc = t.has(`categories.${categoryKey}.description`) ? t(`categories.${categoryKey}.description`) : ''; return { @@ -130,15 +131,17 @@ export default async function ProductPage({ params }: ProductPageProps) { // Check if it's a category page const categories = ['low-voltage-cables', 'medium-voltage-cables', 'high-voltage-cables', 'solar-cables']; - if (categories.includes(productSlug)) { + const fileSlug = await mapSlugToFileSlug(productSlug, locale); + + if (categories.includes(fileSlug)) { const allProducts = await getAllProducts(locale); - const categoryKey = productSlug.replace(/-cables$/, '').replace(/-([a-z])/g, (g) => g[1].toUpperCase()); - const categoryTitle = t.has(`categories.${categoryKey}.title`) ? t(`categories.${categoryKey}.title`) : productSlug; + const categoryKey = fileSlug.replace(/-cables$/, '').replace(/-([a-z])/g, (g) => g[1].toUpperCase()); + const categoryTitle = t.has(`categories.${categoryKey}.title`) ? t(`categories.${categoryKey}.title`) : fileSlug; // Filter products for this category const filteredProducts = allProducts.filter(p => p.frontmatter.categories.some(cat => - cat.toLowerCase().replace(/\s+/g, '-') === productSlug || + cat.toLowerCase().replace(/\s+/g, '-') === fileSlug || cat === categoryTitle ) ); @@ -245,8 +248,9 @@ export default async function ProductPage({ params }: ProductPageProps) { const datasheetPath = getDatasheetPath(productSlug, locale); const isFallback = (product.frontmatter as any).isFallback; const categorySlug = slug[0]; - const categoryKey = categorySlug.replace(/-cables$/, '').replace(/-([a-z])/g, (g) => g[1].toUpperCase()); - const categoryTitle = t.has(`categories.${categoryKey}.title`) ? t(`categories.${categoryKey}.title`) : categorySlug; + const categoryFileSlug = await mapSlugToFileSlug(categorySlug, locale); + const categoryKey = categoryFileSlug.replace(/-cables$/, '').replace(/-([a-z])/g, (g) => g[1].toUpperCase()); + const categoryTitle = t.has(`categories.${categoryKey}.title`) ? t(`categories.${categoryKey}.title`) : categoryFileSlug; const sidebar = (