From 16258640ad2fb9b0e49e45a037b5d13ae133b24e Mon Sep 17 00:00:00 2001 From: marc Date: Fri, 18 Sep 2026 21:23:31 +0200 Subject: [PATCH] docs(ideas): Mehrsprachigkeit notiert, samt der 144 Server-Meldungen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gemessen statt geschätzt: ~986 Zeichenketten im Frontend, 144 Fehlermeldungen im Backend. Der Punkt, den man dabei vergisst, ist der zweite Teil: Die Server-Meldungen landen seit dieser Woche in den Toasts. Wer nur das Frontend übersetzt, bekommt eine deutsche Oberfläche, die bei jedem Fehler auf Englisch umschaltet. Dazu der Intl-Teil, der sich auch ohne jede Übersetzung lohnt: sechs handgeschriebene Wochentag- und Monats-Arrays, und Intl wird nirgends benutzt. Co-Authored-By: Claude Opus 5 --- IDEAS.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/IDEAS.md b/IDEAS.md index fa06d06..bd71825 100644 --- a/IDEAS.md +++ b/IDEAS.md @@ -128,3 +128,59 @@ als Unterbau, ein neues Backend wäre es nicht. **Der Anlass wäre: automatischer Fotoupload.** Solange das nicht gebraucht wird, ist die installierte Weboberfläche der bessere Weg — sie ist da, sie ist gepflegt, und sie ist genau eine Codebasis. + +--- + +## Mehrsprachigkeit — notiert (18.09.2026) + +Die Oberfläche spricht seit dem 18.09.2026 durchgehend Englisch. Deutsch (oder +irgendeine weitere Sprache) daneben wäre eine eigene Baustelle. + +**Der Umfang, gemessen statt geschätzt:** + + ~986 sichtbare Zeichenketten in 55 Frontend-Dateien + 144 Fehlermeldungen im Backend + +**Der Punkt, den man dabei vergisst: Es sind zwei Übersetzungen, nicht eine.** + +Die 144 Meldungen des Servers landen seit dieser Woche in den Toasts – „You +only have read access to this file" kommt aus Go, nicht aus React. Wer nur das +Frontend übersetzt, bekommt eine deutsche Oberfläche, die bei jedem Fehler auf +Englisch umschaltet. Das wirkt kaputter als durchgehend Englisch. + +Der saubere Weg: Der Server schickt keinen fertigen Satz mehr, sondern einen +Schlüssel samt Werten (`{"error":"file.read_only"}`); übersetzt wird vorne, wo +der Katalog ohnehin liegt. Das ist eine Protokolländerung an 144 Stellen, kein +Wörterbuch. + +**Wie es gebaut würde:** + +* Jede Zeichenkette wird ein Schlüssel (`t('calendar.new')`). Rund 1000 + Stellen – stumpfe Arbeit, gut mit Werkzeug zu machen. +* `react-i18next` statt Eigenbau. Eigenbau scheitert an den **Pluralformen**: + „1 Datei" / „5 Dateien", und andere Sprachen haben mehr als zwei Formen. +* Die Sprache kommt aus `navigator.language`, ist im Profil überschreibbar und + liegt **in der Datenbank** – damit sie am Telefon dieselbe ist wie am + Rechner. Dieselbe Entscheidung wie bei den Favoriten. + +**Warum vertagt:** Marc ist der einzige Nutzer und liest Englisch. Der Preis +ist nicht die einmalige Umstellung, sondern dass ab dann *jeder neue Text zwei +Änderungen kostet* – für immer. Der Anlass wäre eine zweite Person, die kein +Englisch mag. + +### Unabhängig davon lohnend: `Intl` + +Aether pflegt **sechs handgeschriebene Arrays** mit Wochentagen und +Monatsnamen (CalendarPage, DayDialog, EventDialog), und `Intl` wird im ganzen +Projekt **nirgends** benutzt. Dabei kann der Browser das seit Jahren: + + new Intl.DateTimeFormat(sprache, { weekday: 'short' }) + +Das ersetzt alle sechs, kostet keine Abhängigkeit und entschärft eine Falle, +die beim Übersetzen auffiel: `DayDialog` beginnt seine Woche am **Sonntag**, +die anderen am **Montag** – jeweils passend zu ihrer Indizierung. Heute +korrekt, aber wer eines dieser Arrays kopiert, baut sich einen +Off-by-one-Fehler. + +Lohnt sich auch ohne jede Übersetzung, und wäre die Vorarbeit, falls sie +kommt.