import Footer from 'components/layout/footer'; import Header from 'components/layout/header'; import { NextIntlClientProvider } from 'next-intl'; import { Inter } from 'next/font/google'; import { notFound } from 'next/navigation'; import { ReactNode } from 'react'; import './globals.css'; const SITE_NAME = "KM Storefront" const SITE_DESCRIPTION = "Webb och digitalbyrå från Göteborg" const TWITTER_CREATOR = "@kodamera.se" const TWITTER_SITE = "https://kodamera.se" const OG_IMAGE_URL = "/og-image.jpg" const OG_IMAGE_ALT = "Kodamera" export const metadata = { title: { default: SITE_NAME, template: `%s | ${SITE_NAME}` }, description: SITE_DESCRIPTION, openGraph: { images: [ { url: OG_IMAGE_URL, width: 1200, height: 630, alt: OG_IMAGE_ALT }, ], }, robots: { follow: true, index: true }, ...(TWITTER_CREATOR && TWITTER_SITE && { twitter: { card: 'summary_large_image', creator: TWITTER_CREATOR, site: TWITTER_SITE } }) }; const inter = Inter({ subsets: ['latin'], display: 'swap', variable: '--font-inter' }); export function generateStaticParams() { return [{locale: 'sv'}, {locale: 'en'}]; } interface LocaleLayoutProps { children: ReactNode params: { locale: string } } export default async function LocaleLayout({children, params: {locale}}: LocaleLayoutProps) { let messages; try { messages = (await import(`../../messages/${locale}.json`)).default; } catch (error) { notFound(); } return (
{children}