feat(i18n): Deutsch/Englisch, Sprachknopf und GitHub-Link in der Kopfzeile

- i18n-Kern im gettext-Stil (t/msg, Wörterbuch en.ts); Startsprache aus localStorage, sonst Browsersprache;
  <html lang> setzt auch das Inline-Skript in index.html. Ein Test prüft t()/msg() und en.ts in beide Richtungen.
- Kopfzeile: GitHub-Link und Sprachknopf (Zielsprache, Beschriftung und lang in der Zielsprache), Fußzeile aus mountFooter,
  Banner und Seitentitel übersetzt, statisches index.html englisch.
- Sprachwechsel ohne Neuladen (main.ts): Kopfzeile, Banner, Konto-Menü und Fußzeile neu aufgebaut, rerender() des Routers baut
  die Seite neu auf, der Editor-Store bleibt; der Appwrite-Client bekommt die Sprache.
- Kopfzeile bleibt in einer Zeile: einzeilig ab 1000 px (vorher 900), GitHub-Text ab 1230 px, auf schmalen Telefonen steht
  „Anmelden“ neben der Suche.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-04 18:33:15 +00:00
1 parent 9455013833
commit e1fb632cdd
21 files changed
+1321 -66

No files matched your search

+33
View File
@@ -0,0 +1,33 @@
// Englisches Wörterbuch: deutscher Text (Schlüssel) → Englisch, gelesen von t() in i18n.ts. Fehlt ein Eintrag, bleibt der deutsche Text.
// Jeder Eintrag gehört zu einem t('…') oder msg('…') im Quelltext; coverage.test.ts prüft es in beide Richtungen.
// Englisch: kurz, freundlich, US-Schreibweise. „AirCard-IOS“ ist der Name dieser Seite, „AirCard-iOS“ der Name der App.
export const EN: Readonly<Record<string, string>> = {
// Seitentitel (pages/router.ts)
'AirCard-IOS – Kartendesigns für Apple Wallet': 'AirCard-IOS – Card designs for Apple Wallet',
'Gestalten – AirCard-IOS': 'Create – AirCard-IOS',
'Meine Karten – AirCard-IOS': 'My cards – AirCard-IOS',
'Community – AirCard-IOS': 'Community – AirCard-IOS',
'Passwort neu setzen – AirCard-IOS': 'Set new password – AirCard-IOS',
// Kopfzeile (shell/header.ts)
'Hauptnavigation': 'Main navigation',
'Community': 'Community',
'Gestalten': 'Create',
'Meine Karten': 'My cards',
'Unterstützen': 'Support us',
'Titel, Tags oder Herausgeber': 'Title, tags or issuer',
'Community-Karten durchsuchen': 'Search community cards',
'Suchen': 'Search',
'Hell/Dunkel umschalten': 'Toggle light/dark mode',
'Menü': 'Menu',
'AirCard-iOS auf GitHub': 'AirCard-iOS on GitHub',
// Spenden-Banner (shell/donate-banner.ts)
'Banner schließen': 'Close banner',
'Gefällt dir AirCard-IOS? Spendier uns einen Kaffee – damit das Projekt weiterläuft.':
'Enjoying AirCard-IOS? Buy us a coffee – it keeps the project running.',
// Fußzeile (shell/footer.ts)
'Inoffizielle Community-Seite für die App AirCard-iOS – kein Teil des Original-Projekts und nicht mit Apple verbunden. Logos und Motive stammen von Nutzern; alle Marken gehören ihren Inhabern.':
'Unofficial community site for the AirCard-iOS app – not part of the original project and not affiliated with Apple. Logos and artwork are uploaded by users; all trademarks belong to their owners.',
};