+
+
+ )
+}
diff --git a/src/app/blog/posts/first_images.mdx b/src/app/[locale]/blog/posts/first_images.mdx
similarity index 100%
rename from src/app/blog/posts/first_images.mdx
rename to src/app/[locale]/blog/posts/first_images.mdx
diff --git a/src/app/blog/posts/first_images_de.mdx b/src/app/[locale]/blog/posts/first_images_de.mdx
similarity index 100%
rename from src/app/blog/posts/first_images_de.mdx
rename to src/app/[locale]/blog/posts/first_images_de.mdx
diff --git a/src/app/blog/posts/launch.mdx b/src/app/[locale]/blog/posts/launch.mdx
similarity index 100%
rename from src/app/blog/posts/launch.mdx
rename to src/app/[locale]/blog/posts/launch.mdx
diff --git a/src/app/blog/posts/launch_de.mdx b/src/app/[locale]/blog/posts/launch_de.mdx
similarity index 100%
rename from src/app/blog/posts/launch_de.mdx
rename to src/app/[locale]/blog/posts/launch_de.mdx
diff --git a/src/app/blog/posts/news1.mdx b/src/app/[locale]/blog/posts/news1.mdx
similarity index 100%
rename from src/app/blog/posts/news1.mdx
rename to src/app/[locale]/blog/posts/news1.mdx
diff --git a/src/app/blog/posts/news10.mdx b/src/app/[locale]/blog/posts/news10.mdx
similarity index 100%
rename from src/app/blog/posts/news10.mdx
rename to src/app/[locale]/blog/posts/news10.mdx
diff --git a/src/app/blog/posts/news11.mdx b/src/app/[locale]/blog/posts/news11.mdx
similarity index 100%
rename from src/app/blog/posts/news11.mdx
rename to src/app/[locale]/blog/posts/news11.mdx
diff --git a/src/app/blog/posts/news12.mdx b/src/app/[locale]/blog/posts/news12.mdx
similarity index 100%
rename from src/app/blog/posts/news12.mdx
rename to src/app/[locale]/blog/posts/news12.mdx
diff --git a/src/app/blog/posts/news13.mdx b/src/app/[locale]/blog/posts/news13.mdx
similarity index 100%
rename from src/app/blog/posts/news13.mdx
rename to src/app/[locale]/blog/posts/news13.mdx
diff --git a/src/app/blog/posts/news14.mdx b/src/app/[locale]/blog/posts/news14.mdx
similarity index 100%
rename from src/app/blog/posts/news14.mdx
rename to src/app/[locale]/blog/posts/news14.mdx
diff --git a/src/app/blog/posts/news15.mdx b/src/app/[locale]/blog/posts/news15.mdx
similarity index 100%
rename from src/app/blog/posts/news15.mdx
rename to src/app/[locale]/blog/posts/news15.mdx
diff --git a/src/app/blog/posts/news16.mdx b/src/app/[locale]/blog/posts/news16.mdx
similarity index 100%
rename from src/app/blog/posts/news16.mdx
rename to src/app/[locale]/blog/posts/news16.mdx
diff --git a/src/app/blog/posts/news17.mdx b/src/app/[locale]/blog/posts/news17.mdx
similarity index 100%
rename from src/app/blog/posts/news17.mdx
rename to src/app/[locale]/blog/posts/news17.mdx
diff --git a/src/app/blog/posts/news18.mdx b/src/app/[locale]/blog/posts/news18.mdx
similarity index 100%
rename from src/app/blog/posts/news18.mdx
rename to src/app/[locale]/blog/posts/news18.mdx
diff --git a/src/app/blog/posts/news19.mdx b/src/app/[locale]/blog/posts/news19.mdx
similarity index 100%
rename from src/app/blog/posts/news19.mdx
rename to src/app/[locale]/blog/posts/news19.mdx
diff --git a/src/app/blog/posts/news2.mdx b/src/app/[locale]/blog/posts/news2.mdx
similarity index 100%
rename from src/app/blog/posts/news2.mdx
rename to src/app/[locale]/blog/posts/news2.mdx
diff --git a/src/app/blog/posts/news20.mdx b/src/app/[locale]/blog/posts/news20.mdx
similarity index 100%
rename from src/app/blog/posts/news20.mdx
rename to src/app/[locale]/blog/posts/news20.mdx
diff --git a/src/app/blog/posts/news21.mdx b/src/app/[locale]/blog/posts/news21.mdx
similarity index 100%
rename from src/app/blog/posts/news21.mdx
rename to src/app/[locale]/blog/posts/news21.mdx
diff --git a/src/app/blog/posts/news22.mdx b/src/app/[locale]/blog/posts/news22.mdx
similarity index 100%
rename from src/app/blog/posts/news22.mdx
rename to src/app/[locale]/blog/posts/news22.mdx
diff --git a/src/app/blog/posts/news23.mdx b/src/app/[locale]/blog/posts/news23.mdx
similarity index 100%
rename from src/app/blog/posts/news23.mdx
rename to src/app/[locale]/blog/posts/news23.mdx
diff --git a/src/app/blog/posts/news24.mdx b/src/app/[locale]/blog/posts/news24.mdx
similarity index 100%
rename from src/app/blog/posts/news24.mdx
rename to src/app/[locale]/blog/posts/news24.mdx
diff --git a/src/app/blog/posts/news3.mdx b/src/app/[locale]/blog/posts/news3.mdx
similarity index 100%
rename from src/app/blog/posts/news3.mdx
rename to src/app/[locale]/blog/posts/news3.mdx
diff --git a/src/app/blog/posts/news4.mdx b/src/app/[locale]/blog/posts/news4.mdx
similarity index 100%
rename from src/app/blog/posts/news4.mdx
rename to src/app/[locale]/blog/posts/news4.mdx
diff --git a/src/app/blog/posts/news6.mdx b/src/app/[locale]/blog/posts/news6.mdx
similarity index 100%
rename from src/app/blog/posts/news6.mdx
rename to src/app/[locale]/blog/posts/news6.mdx
diff --git a/src/app/blog/posts/news7.mdx b/src/app/[locale]/blog/posts/news7.mdx
similarity index 100%
rename from src/app/blog/posts/news7.mdx
rename to src/app/[locale]/blog/posts/news7.mdx
diff --git a/src/app/blog/posts/news8.mdx b/src/app/[locale]/blog/posts/news8.mdx
similarity index 100%
rename from src/app/blog/posts/news8.mdx
rename to src/app/[locale]/blog/posts/news8.mdx
diff --git a/src/app/blog/posts/news9.mdx b/src/app/[locale]/blog/posts/news9.mdx
similarity index 100%
rename from src/app/blog/posts/news9.mdx
rename to src/app/[locale]/blog/posts/news9.mdx
diff --git a/src/app/blog/posts/summerschool24.mdx b/src/app/[locale]/blog/posts/summerschool24.mdx
similarity index 100%
rename from src/app/blog/posts/summerschool24.mdx
rename to src/app/[locale]/blog/posts/summerschool24.mdx
diff --git a/src/app/blog/posts/summerschool24_de.mdx b/src/app/[locale]/blog/posts/summerschool24_de.mdx
similarity index 100%
rename from src/app/blog/posts/summerschool24_de.mdx
rename to src/app/[locale]/blog/posts/summerschool24_de.mdx
diff --git a/src/app/blog/posts/summerschool25.mdx b/src/app/[locale]/blog/posts/summerschool25.mdx
similarity index 100%
rename from src/app/blog/posts/summerschool25.mdx
rename to src/app/[locale]/blog/posts/summerschool25.mdx
diff --git a/src/app/blog/posts/summerschool25_de.mdx b/src/app/[locale]/blog/posts/summerschool25_de.mdx
similarity index 100%
rename from src/app/blog/posts/summerschool25_de.mdx
rename to src/app/[locale]/blog/posts/summerschool25_de.mdx
diff --git a/src/app/blog/posts/workshop12.mdx b/src/app/[locale]/blog/posts/workshop12.mdx
similarity index 100%
rename from src/app/blog/posts/workshop12.mdx
rename to src/app/[locale]/blog/posts/workshop12.mdx
diff --git a/src/app/contact/page.mdx b/src/app/[locale]/contact/page.mdx
similarity index 100%
rename from src/app/contact/page.mdx
rename to src/app/[locale]/contact/page.mdx
diff --git a/src/app/decalval/about/page.mdx b/src/app/[locale]/decalval/about/page.mdx
similarity index 100%
rename from src/app/decalval/about/page.mdx
rename to src/app/[locale]/decalval/about/page.mdx
diff --git a/src/app/decalval/team/cards/Andreas.mdx b/src/app/[locale]/decalval/team/cards/Andreas.mdx
similarity index 100%
rename from src/app/decalval/team/cards/Andreas.mdx
rename to src/app/[locale]/decalval/team/cards/Andreas.mdx
diff --git a/src/app/decalval/team/cards/Kostas.mdx b/src/app/[locale]/decalval/team/cards/Kostas.mdx
similarity index 100%
rename from src/app/decalval/team/cards/Kostas.mdx
rename to src/app/[locale]/decalval/team/cards/Kostas.mdx
diff --git a/src/app/decalval/team/cards/Martin.mdx b/src/app/[locale]/decalval/team/cards/Martin.mdx
similarity index 100%
rename from src/app/decalval/team/cards/Martin.mdx
rename to src/app/[locale]/decalval/team/cards/Martin.mdx
diff --git a/src/app/decalval/team/cards/Matthias.mdx b/src/app/[locale]/decalval/team/cards/Matthias.mdx
similarity index 100%
rename from src/app/decalval/team/cards/Matthias.mdx
rename to src/app/[locale]/decalval/team/cards/Matthias.mdx
diff --git a/src/app/decalval/team/cards/Mikhail.mdx b/src/app/[locale]/decalval/team/cards/Mikhail.mdx
similarity index 100%
rename from src/app/decalval/team/cards/Mikhail.mdx
rename to src/app/[locale]/decalval/team/cards/Mikhail.mdx
diff --git a/src/app/decalval/team/cards/Nicole.mdx b/src/app/[locale]/decalval/team/cards/Nicole.mdx
similarity index 100%
rename from src/app/decalval/team/cards/Nicole.mdx
rename to src/app/[locale]/decalval/team/cards/Nicole.mdx
diff --git a/src/app/decalval/team/cards/Nuno.mdx b/src/app/[locale]/decalval/team/cards/Nuno.mdx
similarity index 100%
rename from src/app/decalval/team/cards/Nuno.mdx
rename to src/app/[locale]/decalval/team/cards/Nuno.mdx
diff --git a/src/app/decalval/team/cards/Ralph.mdx b/src/app/[locale]/decalval/team/cards/Ralph.mdx
similarity index 100%
rename from src/app/decalval/team/cards/Ralph.mdx
rename to src/app/[locale]/decalval/team/cards/Ralph.mdx
diff --git a/src/app/decalval/team/page.mdx b/src/app/[locale]/decalval/team/page.mdx
similarity index 100%
rename from src/app/decalval/team/page.mdx
rename to src/app/[locale]/decalval/team/page.mdx
diff --git a/src/app/decalval/wps/page.mdx b/src/app/[locale]/decalval/wps/page.mdx
similarity index 100%
rename from src/app/decalval/wps/page.mdx
rename to src/app/[locale]/decalval/wps/page.mdx
diff --git a/src/app/events/polinsar/page.mdx b/src/app/[locale]/events/polinsar/page.mdx
similarity index 100%
rename from src/app/events/polinsar/page.mdx
rename to src/app/[locale]/events/polinsar/page.mdx
diff --git a/src/app/events/summerschool/2022/page.mdx b/src/app/[locale]/events/summerschool/2022/page.mdx
similarity index 100%
rename from src/app/events/summerschool/2022/page.mdx
rename to src/app/[locale]/events/summerschool/2022/page.mdx
diff --git a/src/app/events/summerschool/2024/page.mdx b/src/app/[locale]/events/summerschool/2024/page.mdx
similarity index 100%
rename from src/app/events/summerschool/2024/page.mdx
rename to src/app/[locale]/events/summerschool/2024/page.mdx
diff --git a/src/app/events/summerschool/2025/page.mdx b/src/app/[locale]/events/summerschool/2025/page.mdx
similarity index 100%
rename from src/app/events/summerschool/2025/page.mdx
rename to src/app/[locale]/events/summerschool/2025/page.mdx
diff --git a/src/app/events/summerschool/page.mdx b/src/app/[locale]/events/summerschool/page.mdx
similarity index 100%
rename from src/app/events/summerschool/page.mdx
rename to src/app/[locale]/events/summerschool/page.mdx
diff --git a/src/app/events/webinar/page.mdx b/src/app/[locale]/events/webinar/page.mdx
similarity index 100%
rename from src/app/events/webinar/page.mdx
rename to src/app/[locale]/events/webinar/page.mdx
diff --git a/src/app/[locale]/landing-de.mdx b/src/app/[locale]/landing-de.mdx
new file mode 100644
index 0000000..344efc4
--- /dev/null
+++ b/src/app/[locale]/landing-de.mdx
@@ -0,0 +1,121 @@
+import ContentSplitSection from '@/components/ContentSplitSection';
+import Image from 'next/image';
+import { Button } from "@/components/ui/button"
+import {
+ Card,
+ CardDescription,
+ CardHeader,
+ CardTitle,
+} from "@/components/ui/card"
+
+
+
+
+------------------
+
+
+
+Im April 2025 startete die ESA den Earth Explorer BIOMASS. Die Mission verbessert unser Verständnis der Rolle der Landbiosphäre im globalen Kohlenstoffkreislauf, mit klaren Implikationen im Kontext des Klimawandels. Mit Hilfe der Fernerkundung ist BIOMASS die erste Mission mit einem operationellen P-Band-SAR im Weltraum und erfasst den Zustand vor allem tropischer Wälder.
+
+Das Projektbüro BIOMASS ist eine Kooperation des Max-Planck-Instituts für Biogeochemie, der Friedrich-Schiller-Universität Jena, des Deutschen Zentrums für Luft- und Raumfahrt (DLR) und des Helmholtz-Zentrums für Umweltforschung (UFZ). Wir wollen
+
+- relevante Informationen in der nationalen BIOMASS-Community zusammenführen, aufbereiten und verbreiten
+- Lücken identifizieren
+- Lösungen im Kontext der BIOMASS-Mission untersuchen
+- den Dialog im weiteren Kontext der BIOMASS-Mission pflegen
+
+
+Der Koordinierte Deutsche Beitrag zu den BIOMASS Cal/Val-Aktivitäten ist eine Kooperation des Max-Planck-Instituts für Biogeochemie, des GFZ Helmholtz-Zentrums für Geowissenschaften, des DLR, des UFZ und der Technischen Universität Dresden (TUD), unterstützt von der University of Maryland und Wilderness International. Wir wollen
+
+- umfangreiche Gelegenheitsdatenbanken sammeln und Referenzdaten aus Airborne-LiDAR, Drohnenbildern und Radartransekten harmonisieren
+- Beobachtungskampagnen planen, die existierende Domänen und Dichtegradienten abdecken
+- BIOMASS-Produkte für oberirdische Biomasse (AGBD), Waldhöhe (FH) und Waldveränderungen validieren
+- prozessbasierte Modelle für die Dateninterpretation nutzen
+
+
+Für unsere Community bieten wir
+
+- Regelmäßige Webinare zu BIOMASS-Wissenschaft und Anwendungen
+- Sommerschulen zur BIOMASS-Mission
+- Tutorials und Hintergründe über das eo-college
+- Unterstützung für die DLR PolInSAR-Kurse
+
+
+
+
+
+
diff --git a/src/app/page.mdx b/src/app/[locale]/landing-en.mdx
similarity index 96%
rename from src/app/page.mdx
rename to src/app/[locale]/landing-en.mdx
index fa7ba46..ec4f9fb 100644
--- a/src/app/page.mdx
+++ b/src/app/[locale]/landing-en.mdx
@@ -1,4 +1,3 @@
-
import ContentSplitSection from '@/components/ContentSplitSection';
import Image from 'next/image';
import { Button } from "@/components/ui/button"
@@ -125,12 +124,12 @@ The Coordinated German Contribution to the BIOMASS Cal/Val Act
For our community, we host
- Regular webinars on topics related to BIOMASS science and applications
-- Summer schools on the upcoming BIOMASS mission and its context in current research goals
+- Summer schools on the upcoming BIOMASS mission and its context in current research goals
- Tutorials and background information on the BIOMASS mission via the eo-college
-- Support for the DLR’s PolInSAR courses
+- Support for the DLR's PolInSAR courses
-
\ No newline at end of file
+
diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx
new file mode 100644
index 0000000..a8e2510
--- /dev/null
+++ b/src/app/[locale]/layout.tsx
@@ -0,0 +1,29 @@
+import { LocaleProvider } from '@/contexts/LocaleContext'
+import { SetHtmlLang } from '@/components/SetHtmlLang'
+import Menu from '@/components/Menu'
+import Footer from '@/components/Footer'
+import { locales, isValidLocale, defaultLocale, type Locale } from '@/config/i18n'
+
+export function generateStaticParams() {
+ return locales.map((locale) => ({ locale }))
+}
+
+export default async function LocaleLayout({
+ children,
+ params,
+}: {
+ children: React.ReactNode
+ params: Promise<{ locale: string }>
+}) {
+ const { locale: raw } = await params
+ const locale: Locale = isValidLocale(raw) ? raw : defaultLocale
+
+ return (
+
+
+
+ {children}
+
+
+ )
+}
diff --git a/src/app/[locale]/page.tsx b/src/app/[locale]/page.tsx
new file mode 100644
index 0000000..bdd9c5c
--- /dev/null
+++ b/src/app/[locale]/page.tsx
@@ -0,0 +1,19 @@
+import { isValidLocale, defaultLocale, type Locale } from '@/config/i18n'
+import LandingEn from './landing-en.mdx'
+import LandingDe from './landing-de.mdx'
+
+const landing = {
+ en: LandingEn,
+ de: LandingDe,
+} as const
+
+interface PageProps {
+ params: Promise<{ locale: string }>
+}
+
+export default async function LocaleHomePage({ params }: PageProps) {
+ const { locale: raw } = await params
+ const locale: Locale = isValidLocale(raw) ? raw : defaultLocale
+ const Page = landing[locale] ?? landing.en
+ return
+}
diff --git a/src/app/project/about/page.mdx b/src/app/[locale]/project/about/page.mdx
similarity index 100%
rename from src/app/project/about/page.mdx
rename to src/app/[locale]/project/about/page.mdx
diff --git a/src/app/project/publications/page.mdx b/src/app/[locale]/project/publications/page.mdx
similarity index 100%
rename from src/app/project/publications/page.mdx
rename to src/app/[locale]/project/publications/page.mdx
diff --git a/src/app/project/team/cards/Laura.mdx b/src/app/[locale]/project/team/cards/Laura.mdx
similarity index 100%
rename from src/app/project/team/cards/Laura.mdx
rename to src/app/[locale]/project/team/cards/Laura.mdx
diff --git a/src/app/project/team/cards/Nicole.mdx b/src/app/[locale]/project/team/cards/Nicole.mdx
similarity index 100%
rename from src/app/project/team/cards/Nicole.mdx
rename to src/app/[locale]/project/team/cards/Nicole.mdx
diff --git a/src/app/project/team/page.mdx b/src/app/[locale]/project/team/page.mdx
similarity index 100%
rename from src/app/project/team/page.mdx
rename to src/app/[locale]/project/team/page.mdx
diff --git a/src/app/project/wps/page.mdx b/src/app/[locale]/project/wps/page.mdx
similarity index 100%
rename from src/app/project/wps/page.mdx
rename to src/app/[locale]/project/wps/page.mdx
diff --git a/src/app/resources/newsletter/page.mdx b/src/app/[locale]/resources/newsletter/page.mdx
similarity index 100%
rename from src/app/resources/newsletter/page.mdx
rename to src/app/[locale]/resources/newsletter/page.mdx
diff --git a/src/app/resources/publications/page.mdx b/src/app/[locale]/resources/publications/page.mdx
similarity index 100%
rename from src/app/resources/publications/page.mdx
rename to src/app/[locale]/resources/publications/page.mdx
diff --git a/src/app/resources/relatedmissions/page.mdx b/src/app/[locale]/resources/relatedmissions/page.mdx
similarity index 100%
rename from src/app/resources/relatedmissions/page.mdx
rename to src/app/[locale]/resources/relatedmissions/page.mdx
diff --git a/src/app/resources/tools-data/page.mdx b/src/app/[locale]/resources/tools-data/page.mdx
similarity index 100%
rename from src/app/resources/tools-data/page.mdx
rename to src/app/[locale]/resources/tools-data/page.mdx
diff --git a/src/app/terms/imprint/page.mdx b/src/app/[locale]/terms/imprint/page.mdx
similarity index 100%
rename from src/app/terms/imprint/page.mdx
rename to src/app/[locale]/terms/imprint/page.mdx
diff --git a/src/app/terms/privacy/page.mdx b/src/app/[locale]/terms/privacy/page.mdx
similarity index 100%
rename from src/app/terms/privacy/page.mdx
rename to src/app/[locale]/terms/privacy/page.mdx
diff --git a/src/app/blog/page.tsx b/src/app/blog/page.tsx
deleted file mode 100644
index 6324c27..0000000
--- a/src/app/blog/page.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { BlogPosts } from '@/components/posts'
-
-export const metadata = {
- title: 'Posts',
- description: 'Read my posts.',
-}
-
-export default function Page() {
- return (
-
-
-
NEWS
-
-
- )
-}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index ed417b6..cb0fc16 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,10 +1,7 @@
import type { Metadata } from "next";
import { ThemeProvider } from 'next-themes'
-import Menu from "@/components/Menu";
-import Footer from "@/components/Footer";
import "./globals.css";
-
export const metadata: Metadata = {
title: "eebiomass",
description: "Project Office BIOMASS.",
@@ -17,13 +14,9 @@ export default function RootLayout({
}>) {
return (
-
+
-
{children}
-
diff --git a/src/app/not-found.js b/src/app/not-found.js
index b85178c..732a853 100644
--- a/src/app/not-found.js
+++ b/src/app/not-found.js
@@ -10,8 +10,8 @@ export default function NotFound() {
Let insight guide us back to familiar ground.
-
- Go back to Home
+
+ Go back to Home
diff --git a/src/app/page.tsx b/src/app/page.tsx
new file mode 100644
index 0000000..2dc7394
--- /dev/null
+++ b/src/app/page.tsx
@@ -0,0 +1,27 @@
+import Link from 'next/link'
+import { locales } from '@/config/i18n'
+
+const labels: Record = {
+ en: 'English',
+ de: 'Deutsch',
+}
+
+export default function RootPage() {
+ return (
+