import { notFound, redirect, permanentRedirect } from 'next/navigation'; import { Container, Badge, Heading } from '@/components/ui'; import { getTranslations, setRequestLocale } from 'next-intl/server'; import { Metadata } from 'next'; import { getPageBySlug, getAllPages } from '@/lib/pages'; import { mapSlugToFileSlug, mapFileSlugToTranslated } from '@/lib/slugs'; import PayloadRichText from '@/components/PayloadRichText'; import { SITE_URL } from '@/lib/schema'; import TrackedLink from '@/components/analytics/TrackedLink'; interface PageProps { params: Promise<{ locale: string; slug: string; }>; } export async function generateMetadata({ params }: PageProps): Promise { const { locale, slug } = await params; const pageData = await getPageBySlug(slug, locale); if (!pageData) return {}; const fileSlug = await mapSlugToFileSlug(pageData.slug || slug, locale); const deSlug = await mapFileSlugToTranslated(fileSlug, 'de'); const enSlug = await mapFileSlugToTranslated(fileSlug, 'en'); // Determine correct localized slug based on current locale const currentLocaleSlug = locale === 'de' ? deSlug : enSlug; return { title: pageData.frontmatter.title, description: pageData.frontmatter.excerpt || '', alternates: { canonical: `${SITE_URL}/${locale}/${currentLocaleSlug}`, languages: { de: `${SITE_URL}/de/${deSlug}`, en: `${SITE_URL}/en/${enSlug}`, 'x-default': `${SITE_URL}/en/${enSlug}`, }, }, openGraph: { title: `${pageData.frontmatter.title} | KLZ Cables`, description: pageData.frontmatter.excerpt || '', url: `${SITE_URL}/${locale}/${currentLocaleSlug}`, }, twitter: { card: 'summary_large_image', title: `${pageData.frontmatter.title} | KLZ Cables`, description: pageData.frontmatter.excerpt || '', }, }; } export default async function StandardPage({ params }: PageProps) { const { locale, slug } = await params; setRequestLocale(locale); const pageData = await getPageBySlug(slug, locale); const t = await getTranslations('StandardPage'); if (!pageData) { notFound(); } // Handle explicit CMS redirects (e.g. /en/terms -> /de/terms) if (pageData.redirectUrl) { if (pageData.redirectPermanent) { permanentRedirect(pageData.redirectUrl); } else { redirect(pageData.redirectUrl); } } // Redirect if accessed via a different locale's slug const fileSlug = await mapSlugToFileSlug(pageData.slug || slug, locale); const correctSlug = await mapFileSlugToTranslated(fileSlug, locale); if (correctSlug && correctSlug !== slug) { redirect(`/${locale}/${correctSlug}`); } // Full-bleed pages render blocks edge-to-edge without the generic article wrapper if (pageData.frontmatter.layout === 'fullBleed') { return (
); } // Default article layout with hero, content, and support CTA return (
{/* Hero Section */}
{t('badge')} {pageData.frontmatter.title}
{/* Main Content Area */}
{/* Excerpt/Lead paragraph if available */} {pageData.frontmatter.excerpt && (

{pageData.frontmatter.excerpt}

)} {/* Main content with shared blog components */}
{/* Support Section */}

{t('needHelp')}

{t('supportTeamAvailable')}

{t('contactUs')}
); }