- Add English translations to cv-data.ts with getCvData(lang) helper - Create app/[lang]/ routing with static generation for nl and en - Add language switcher in nav (NL / EN toggle) - Add middleware for Accept-Language auto-redirect on root path - Root layout reads x-lang header to set <html lang> correctly - All components accept lang prop and render translated content Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
41 lines
1 KiB
TypeScript
41 lines
1 KiB
TypeScript
import type { Metadata } from "next";
|
|
import { DM_Sans } from "next/font/google";
|
|
import { headers } from "next/headers";
|
|
import "./globals.css";
|
|
|
|
const dmSans = DM_Sans({
|
|
subsets: ["latin"],
|
|
variable: "--font-sans",
|
|
display: "swap",
|
|
});
|
|
|
|
export const metadata: Metadata = {
|
|
metadataBase: new URL("https://jp-visser.nl"),
|
|
};
|
|
|
|
export default async function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
const headersList = await headers();
|
|
const lang = headersList.get("x-lang") ?? "nl";
|
|
|
|
return (
|
|
<html lang={lang} className={dmSans.variable}>
|
|
<head>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link
|
|
rel="preconnect"
|
|
href="https://fonts.gstatic.com"
|
|
crossOrigin="anonymous"
|
|
/>
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
</head>
|
|
<body className="font-sans">{children}</body>
|
|
</html>
|
|
);
|
|
}
|