docs(ideas): Mehrsprachigkeit notiert, samt der 144 Server-Meldungen

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 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-09-18 21:23:31 +02:00
1 parent 7005b2ce01
commit 16258640ad
1 file changed
+56
+56
View File
@@ -128,3 +128,59 @@ als Unterbau, ein neues Backend wäre es nicht.
**Der Anlass wäre: automatischer Fotoupload.** Solange das nicht gebraucht **Der Anlass wäre: automatischer Fotoupload.** Solange das nicht gebraucht
wird, ist die installierte Weboberfläche der bessere Weg — sie ist da, sie ist wird, ist die installierte Weboberfläche der bessere Weg — sie ist da, sie ist
gepflegt, und sie ist genau eine Codebasis. 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.