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:
1 parent
7005b2ce01
commit
16258640ad
1 file changed
+56
@@ -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.
|
||||
Reference in new issue
Block a user