mirror of
https://github.com/theoludwig/theoludwig.git
synced 2024-11-14 00:03:12 +01:00
92 lines
2.1 KiB
TypeScript
92 lines
2.1 KiB
TypeScript
|
import "@repo/config-tailwind/styles.css"
|
||
|
import type { Locale, LocaleProps } from "@repo/i18n/config"
|
||
|
import { LOCALES } from "@repo/i18n/config"
|
||
|
import { Footer } from "@repo/ui/Footer"
|
||
|
import { Header } from "@repo/ui/Header"
|
||
|
import { ThemeProvider } from "@repo/ui/Header/SwitchTheme"
|
||
|
import { VERSION } from "@repo/utils/constants"
|
||
|
import type { Metadata } from "next"
|
||
|
import { NextIntlClientProvider } from "next-intl"
|
||
|
import {
|
||
|
getMessages,
|
||
|
getTranslations,
|
||
|
unstable_setRequestLocale,
|
||
|
} from "next-intl/server"
|
||
|
|
||
|
export const generateMetadata = async ({
|
||
|
params,
|
||
|
}: LocaleProps): Promise<Metadata> => {
|
||
|
const t = await getTranslations({ locale: params.locale })
|
||
|
const title = t("meta.title")
|
||
|
const description = `${title} - ${t("meta.description")}`
|
||
|
const image = "/images/logo.webp"
|
||
|
const url = new URL("https://theoludwig.fr")
|
||
|
const locale = LOCALES.join(", ")
|
||
|
|
||
|
return {
|
||
|
title,
|
||
|
description,
|
||
|
metadataBase: url,
|
||
|
openGraph: {
|
||
|
title,
|
||
|
description,
|
||
|
url,
|
||
|
siteName: title,
|
||
|
images: [
|
||
|
{
|
||
|
url: image,
|
||
|
width: 96,
|
||
|
height: 96,
|
||
|
},
|
||
|
],
|
||
|
locale,
|
||
|
type: "website",
|
||
|
},
|
||
|
twitter: {
|
||
|
card: "summary",
|
||
|
title,
|
||
|
description,
|
||
|
images: [image],
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export const generateStaticParams = (): Array<{ locale: Locale }> => {
|
||
|
return LOCALES.map((locale) => {
|
||
|
return {
|
||
|
locale,
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
interface LocaleLayoutProps extends React.PropsWithChildren {
|
||
|
params: {
|
||
|
locale: Locale
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const LocaleLayout: React.FC<LocaleLayoutProps> = async (props) => {
|
||
|
const { children, params } = props
|
||
|
|
||
|
// Enable static rendering
|
||
|
unstable_setRequestLocale(params.locale)
|
||
|
|
||
|
const messages = await getMessages()
|
||
|
|
||
|
return (
|
||
|
<html lang={params.locale} suppressHydrationWarning>
|
||
|
<body>
|
||
|
<ThemeProvider>
|
||
|
<NextIntlClientProvider messages={messages}>
|
||
|
<Header />
|
||
|
{children}
|
||
|
<Footer version={VERSION} />
|
||
|
</NextIntlClientProvider>
|
||
|
</ThemeProvider>
|
||
|
</body>
|
||
|
</html>
|
||
|
)
|
||
|
}
|
||
|
|
||
|
export default LocaleLayout
|