trails/apps/planner/app
Ullrich Schäfer 79f000fcc5
Upgrade i18next v26 + react-i18next v17 with SSR-safe init
Split initI18n() into separate server/client initialization paths
inspired by remix-i18next's architecture:

- initI18nServer(lng): no LanguageDetector, per-request language from
  Accept-Language header
- initI18nClient(): LanguageDetector reads <html lang> first to match
  server, then localStorage and navigator
- detectLanguage(request): parses Accept-Language for best match

Fixes rehydration errors caused by v26 removing initImmediate option
(replaced with initAsync) and LanguageDetector running on the server
where browser APIs don't exist.

Also makes <html lang> dynamic instead of hardcoded "en".

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 11:38:36 +02:00
..
components Add route interactions: click-to-split, drag-to-reshape, colored route rendering 2026-03-26 21:15:55 +01:00
lib Add observability: health endpoints, structured logging, metrics, Grafana stack 2026-03-26 22:59:44 +01:00
routes Add transactional emails (SMTP) and planner features (no-go areas, notes, crash recovery) 2026-03-26 01:00:42 +01:00
entry.client.tsx Upgrade i18next v26 + react-i18next v17 with SSR-safe init 2026-03-29 11:38:36 +02:00
entry.server.tsx Upgrade i18next v26 + react-i18next v17 with SSR-safe init 2026-03-29 11:38:36 +02:00
root.tsx Upgrade i18next v26 + react-i18next v17 with SSR-safe init 2026-03-29 11:38:36 +02:00
routes.ts Implement Planner-Journal handoff (Group 9) 2026-03-24 20:22:58 +00:00