Add i18n support with NL/EN language switching (ST-001)

- 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>
This commit is contained in:
Janpeter Visser 2026-04-29 15:31:13 +02:00
parent 61e603b5d7
commit d352a7d496
13 changed files with 540 additions and 177 deletions

View file

@ -1,7 +1,9 @@
import { FadeIn } from "./fade-in";
import { CV_DATA } from "@/lib/cv-data";
import { getCvData, type Lang } from "@/lib/cv-data";
export function MotivationSection({ lang }: { lang: Lang }) {
const data = getCvData(lang);
export function MotivationSection() {
return (
<section
id="motivatie"
@ -17,7 +19,7 @@ export function MotivationSection() {
className="text-[13px] font-semibold uppercase mb-3"
style={{ color: "#c2339b", letterSpacing: 3 }}
>
Motivatie
{data.ui.motivation.label}
</p>
<h2
className="font-serif font-normal mb-7"
@ -27,11 +29,11 @@ export function MotivationSection() {
letterSpacing: -1,
}}
>
Waar ik naar zoek
{data.ui.motivation.heading}
</h2>
<div className="max-w-[760px]">
{CV_DATA.motivation.map((paragraph) => (
{data.motivation.map((paragraph) => (
<p
key={paragraph}
className="text-[15px] leading-[1.8] mb-5 last:mb-0"