{t.message}
diff --git a/apps/web/src/lib/i18n/de.ts b/apps/web/src/lib/i18n/de.ts
index e755850..fb2a6e6 100644
--- a/apps/web/src/lib/i18n/de.ts
+++ b/apps/web/src/lib/i18n/de.ts
@@ -212,5 +212,9 @@ export const de: TranslationNode = {
},
common: {
empty: '(leer)',
+ skip_to_content: 'Zum Inhalt springen',
+ main_nav: 'Hauptnavigation',
+ notifications: 'Benachrichtigungen',
+ language_switcher: 'Sprache wechseln',
},
};
diff --git a/apps/web/src/lib/i18n/en.ts b/apps/web/src/lib/i18n/en.ts
index dc4c768..989aea8 100644
--- a/apps/web/src/lib/i18n/en.ts
+++ b/apps/web/src/lib/i18n/en.ts
@@ -209,5 +209,9 @@ export const en: TranslationNode = {
},
common: {
empty: '(empty)',
+ skip_to_content: 'Skip to content',
+ main_nav: 'Main navigation',
+ notifications: 'Notifications',
+ language_switcher: 'Switch language',
},
};
diff --git a/apps/web/src/routes/+layout.svelte b/apps/web/src/routes/+layout.svelte
index 1f72c6a..ed3a694 100644
--- a/apps/web/src/routes/+layout.svelte
+++ b/apps/web/src/routes/+layout.svelte
@@ -2,13 +2,24 @@
import '../app.css';
import Header from '$lib/components/Header.svelte';
import ToastStack from '$lib/components/ToastStack.svelte';
+ import { i18n, t } from '$lib/i18n/index.svelte.ts';
let { children } = $props();
+
+ // Hält das `lang`-Attribut am aktuell. Initial-SSR rendert
+ // "de"; sobald i18n-Detection im Browser läuft, ziehen wir nach.
+ $effect(() => {
+ if (typeof document !== 'undefined') {
+ document.documentElement.setAttribute('lang', i18n.current);
+ }
+ });
+
{t('common.skip_to_content')}
+
-
+
{@render children?.()}
diff --git a/apps/web/src/routes/decks/+page.svelte b/apps/web/src/routes/decks/+page.svelte
index 4f02bfd..9160c5b 100644
--- a/apps/web/src/routes/decks/+page.svelte
+++ b/apps/web/src/routes/decks/+page.svelte
@@ -96,7 +96,7 @@