fix(i18n): englische Seiten werden englisch, Blindtext und Fremdreste raus #96

Merged
Phil merged 6 commits from fix/englische-seiten-und-redaktion into main 2026-09-07 09:20:24 +00:00
Owner

Closes #83

Die Ursache war Konfiguration, nicht Nachlässigkeit

Vier Felder standen auf „nicht übersetzbar". Craft schreibt deren Wert damit in
alle Sprachen gleichzeitig. Ein englischer Text ließ sich dort gar nicht
hinterlegen. Solange das so blieb, war jede Übersetzung dieser Stellen unmöglich,
nicht nur unterlassen. Betroffen: der gesamte Text von /en/impressum und
/en/datenschutz sowie die Produkte-Sektion auf /en/.

Diese vier sind jetzt pro Sprache pflegbar. Bewusst nicht umgestellt, weil
ein Wert für alle Sprachen richtig ist: Zahlen, Adressen, Eigennamen, und vor
allem das Feld mit den Anker-IDs der Startseite. Unterschiedliche IDs pro Sprache
hätten die Navigation aus #82 sofort wieder gebrochen.

Was jetzt anders ist

Englische Startseite. Produkte-Sektion und die drei Belege sind englisch. Der
englische Einleitungssatz trug obendrein eine veraltete deutsche Fassung, die von
vier Produkten sprach, obwohl es drei sind.

Video-Testimonials. Sie fehlten auf /en/ nicht, weil sie unübersetzt waren,
sondern weil die Sektion dort abgeschaltet war. Sie ist wieder an, englisch
gerahmt, mit sichtbarem Hinweis, dass beide Aufnahmen deutsch gesprochen sind.
Eine englische Untertitelspur gibt es nicht; das offen zu sagen ist besser, als
das stärkste Vertrauenselement wegzulassen.

Rechtsseiten. Beide auf Englisch, mit dem üblichen Hinweis, dass die deutsche
Fassung verbindlich ist. Die Texte liegen als HTML unter scripts/i18n/ und sind
im Diff nachlesbar.

Blindtext und Fremdvorlagen-Reste. /datenschutz trug 295 Zeichen „Lorem
ipsum" als Beschreibung, die Social-Titel lauteten Datenschutz - ITC und
Impressum - melanie. Alles weg.

Titel und Beschreibungen. /blog und /en/blog trugen beide „Blog -
Philflow". Ein Artikel hatte 103 Zeichen Titel und 256 Zeichen Beschreibung. Jetzt
liegt kein Titel über 58 und keine Beschreibung über 160 Zeichen.

Kategorie-Archive haben ein eigenes, übersetzbares Beschreibungsfeld statt
generierten Texts, in beiden Sprachen gefüllt.

Zwei Funde, die nicht im Issue standen

Die englische Kennzahlentabelle im Artikel anti-slop-1 wurde deutsch
ausgeliefert, und drei englischen Artikeln fehlte die Beschreibung ganz.

Schwerwiegender: das Impressum zeigte +49 155 63696346 und
hello@philflow.io an, verlinkte aber auf tel:+4915251440476 und
mailto:tech@philflow.io. Die Datenschutzerklärung nannte dieselben falschen
Werte im Klartext. Wer auf einer Rechtsseite auf die Telefonnummer tippte,
landete bei einem anderen Anschluss. In beiden Sprachen korrigiert.

Gemessen, nicht angenommen

Lokal gegen http://localhost:8090 nach clear-caches/all:

  • Auf /en/ ist der einzige verbliebene deutsche Text der Name „Philipp Lütje"
  • /en/ liefert wieder Videos (vorher null)
  • Kennzahlentabelle auf /en/blog/anti-slop-1-… ist englisch
  • Alle drei zuvor leeren englischen Beschreibungen sind gefüllt
  • Kein Titel über 58, keine Beschreibung über 160 Zeichen, /blog und /en/blog
    tragen unterschiedliche Titel
  • Kein „Lorem", kein „melanie", kein „ITC" mehr im Quelltext
  • Keine der vier Rechtsseiten nennt noch die falsche Nummer oder Adresse
  • Die Element-IDs der Migrationen wurden direkt gegen die Produktionsdatenbank
    geprüft
    und stimmen überein

Nicht lokal prüfbar: die gerenderte Fassung der beiden Rechtsseiten. Der
lokale Datenstand liefert dort seit längerem nur den Seitenrahmen ohne Text,
während live 34 KB stehen. Der geschriebene Datenbankinhalt ist verifiziert, das
Rendering wird nach dem Deploy live gemessen.

Bewusst nicht geändert: die Lesbarkeitswerte der deutschen Startseite. Für
die Zielgruppe ist die Sprache so gewollt.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N

Closes #83 ## Die Ursache war Konfiguration, nicht Nachlässigkeit Vier Felder standen auf „nicht übersetzbar". Craft schreibt deren Wert damit in alle Sprachen gleichzeitig. Ein englischer Text ließ sich dort **gar nicht** hinterlegen. Solange das so blieb, war jede Übersetzung dieser Stellen unmöglich, nicht nur unterlassen. Betroffen: der gesamte Text von `/en/impressum` und `/en/datenschutz` sowie die Produkte-Sektion auf `/en/`. Diese vier sind jetzt pro Sprache pflegbar. Bewusst **nicht** umgestellt, weil ein Wert für alle Sprachen richtig ist: Zahlen, Adressen, Eigennamen, und vor allem das Feld mit den Anker-IDs der Startseite. Unterschiedliche IDs pro Sprache hätten die Navigation aus #82 sofort wieder gebrochen. ## Was jetzt anders ist **Englische Startseite.** Produkte-Sektion und die drei Belege sind englisch. Der englische Einleitungssatz trug obendrein eine veraltete deutsche Fassung, die von vier Produkten sprach, obwohl es drei sind. **Video-Testimonials.** Sie fehlten auf `/en/` nicht, weil sie unübersetzt waren, sondern weil die Sektion dort abgeschaltet war. Sie ist wieder an, englisch gerahmt, mit sichtbarem Hinweis, dass beide Aufnahmen deutsch gesprochen sind. Eine englische Untertitelspur gibt es nicht; das offen zu sagen ist besser, als das stärkste Vertrauenselement wegzulassen. **Rechtsseiten.** Beide auf Englisch, mit dem üblichen Hinweis, dass die deutsche Fassung verbindlich ist. Die Texte liegen als HTML unter `scripts/i18n/` und sind im Diff nachlesbar. **Blindtext und Fremdvorlagen-Reste.** `/datenschutz` trug 295 Zeichen „Lorem ipsum" als Beschreibung, die Social-Titel lauteten `Datenschutz - ITC` und `Impressum - melanie`. Alles weg. **Titel und Beschreibungen.** `/blog` und `/en/blog` trugen beide „Blog - Philflow". Ein Artikel hatte 103 Zeichen Titel und 256 Zeichen Beschreibung. Jetzt liegt kein Titel über 58 und keine Beschreibung über 160 Zeichen. **Kategorie-Archive** haben ein eigenes, übersetzbares Beschreibungsfeld statt generierten Texts, in beiden Sprachen gefüllt. ## Zwei Funde, die nicht im Issue standen Die englische Kennzahlentabelle im Artikel anti-slop-1 wurde **deutsch** ausgeliefert, und drei englischen Artikeln fehlte die Beschreibung ganz. Schwerwiegender: das Impressum zeigte `+49 155 63696346` und `hello@philflow.io` an, verlinkte aber auf `tel:+4915251440476` und `mailto:tech@philflow.io`. Die Datenschutzerklärung nannte dieselben falschen Werte im Klartext. Wer auf einer Rechtsseite auf die Telefonnummer tippte, landete bei einem anderen Anschluss. In beiden Sprachen korrigiert. ## Gemessen, nicht angenommen Lokal gegen `http://localhost:8090` nach `clear-caches/all`: - Auf `/en/` ist der einzige verbliebene deutsche Text der Name „Philipp Lütje" - `/en/` liefert wieder Videos (vorher null) - Kennzahlentabelle auf `/en/blog/anti-slop-1-…` ist englisch - Alle drei zuvor leeren englischen Beschreibungen sind gefüllt - Kein Titel über 58, keine Beschreibung über 160 Zeichen, `/blog` und `/en/blog` tragen unterschiedliche Titel - Kein „Lorem", kein „melanie", kein „ITC" mehr im Quelltext - Keine der vier Rechtsseiten nennt noch die falsche Nummer oder Adresse - Die Element-IDs der Migrationen wurden **direkt gegen die Produktionsdatenbank geprüft** und stimmen überein **Nicht lokal prüfbar:** die gerenderte Fassung der beiden Rechtsseiten. Der lokale Datenstand liefert dort seit längerem nur den Seitenrahmen ohne Text, während live 34 KB stehen. Der geschriebene Datenbankinhalt ist verifiziert, das Rendering wird nach dem Deploy live gemessen. **Bewusst nicht geändert:** die Lesbarkeitswerte der deutschen Startseite. Für die Zielgruppe ist die Sprache so gewollt. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N
Die Archive hatten keine Meta-Description, weil das Kategorie-Modell kein
Textfeld dafuer besass. DataForSEO meldete no_description.

Bewusst ein eigenes, uebersetzbares Feld statt eines aus den Artikeltiteln
generierten Textes: generierter Text klingt maschinell und ist genau die Sorte
Inhalt, die Google als duenn einstuft. Der Text erscheint sichtbar als
Einleitung im Archiv und als Meta-Description.

_system/seo.twig bekommt dafuer einen Rueckfall pageDescription, denselben
Mechanismus wie das bereits vorhandene pageTitle: Seiten ohne SEO-Feld koennen
ihre Beschreibung von oben durchreichen.

Refs #83

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N
Drei Befunde, alle im seo-Feld einzelner Entries, keiner im sichtbaren
Seitentext:

/datenschutz und /en/datenschutz trugen 295 Zeichen "Lorem ipsum" als Meta-,
og- und Twitter-Description. Die Social-Titel lauteten "Datenschutz - ITC" und
"Impressum - melanie", Namen aus einer fremden Vorlage.

/blog und /en/blog trugen beide "Blog - Philflow", fuer Google also zwei Seiten
mit identischem Titel. Der Artikel mein-reflex-war-freelancer hatte 103 Zeichen
Titel und 256 Zeichen Description, sein englisches Pendant 94/240, die
Startseite 73 bzw. 71.

Nach der Migration liegt kein Titel ueber 58 und keine Description ueber 160
Zeichen, und die beiden Blog-Uebersichten tragen unterschiedliche Titel.
Gemessen an der laufenden Instanz.

Refs #83

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N
"und mehr zeit kosten" mitten im Satz, kleingeschrieben. Live gemessen auf
philflow.io.

Der zweite im Issue genannte Tippfehler ("Zwei Kunden,45 Sekunden.") kommt auf
keiner Live-Seite mehr vor, der Abschnitt ist zwischenzeitlich umgebaut worden.

Die Migration sucht ueber den Textinhalt statt ueber eine Element-ID, damit sie
auf Prod dieselbe Stelle trifft, und laesst Revisionen und Entwuerfe in Ruhe.

Refs #83

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N
/woran-es-im-tagesgeschaeft-haengt und die englische Fassung
/en/where-time-disappears-in-daily-operations stehen in der Sitemap und
liefern 200, waren aber weder im Warmlauf noch in der Statuspruefung. Ein
Ausfall dort waere unbemerkt geblieben.

Refs #85

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N
Die Ursache war nicht Nachlaessigkeit, sondern Konfiguration: articleContent,
productProof, productCaption und productMetricLabel standen auf
translationMethod "none". Craft repliziert deren Wert damit in alle Sites, ein
englischer Text liess sich dort gar nicht hinterlegen. Diese vier Felder sind
jetzt pro Site uebersetzbar.

Bewusst nicht umgestellt, weil ein Wert fuer alle Sprachen richtig ist: Zahlen,
URLs, Eigennamen, und vor allem newsletterName, das die Anker-IDs der
Startseite traegt. Unterschiedliche IDs pro Sprache wuerden die Navigation aus
#82 wieder brechen.

Danach uebersetzt: die Produkte-Sektion samt der drei Belege. Der englische
Einleitungssatz trug ausserdem eine veraltete deutsche Fassung, die von vier
Produkten sprach, obwohl es drei sind.

Die Video-Testimonials fehlten auf /en/ nicht, weil sie nicht uebersetzt waren,
sondern weil die Sektion dort auf enabled=0 stand. Sie ist wieder aktiv und
englisch gerahmt, mit sichtbarem Hinweis, dass die beiden Aufnahmen deutsch
gesprochen sind: eine englische Untertitelspur gibt es nicht, und das lieber
offen sagen als das staerkste Vertrauenselement weglassen.

Dazu: die Kennzahlentabelle im englischen Artikel anti-slop-1 wurde deutsch
ausgeliefert, drei englischen Artikeln fehlte die Meta-Description.

Refs #83

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N
/en/impressum und /en/datenschutz waren vollstaendig deutsch, unter derselben
Adresse wie die deutschen Fassungen. Fuer Google ist eine als englisch
deklarierte Seite mit deutschem Text ein Qualitaetsproblem, kein Formfehler.

Beide tragen jetzt eine englische Fassung mit dem ueblichen Hinweis, dass die
deutsche rechtlich verbindlich ist. Die Texte liegen als HTML unter
scripts/i18n/ und sind damit im Diff nachlesbar, statt als 20.000 Zeichen
langer String in der Migration zu stehen.

Dabei aufgefallen und mitkorrigiert, in beiden Sprachen: das Impressum zeigte
"+49 155 63696346" und "hello@philflow.io" an, verlinkte aber auf
"tel:+4915251440476" und "mailto:tech@philflow.io". Die Datenschutzerklaerung
nannte dieselben falschen Werte im Klartext. Wer auf einer Rechtsseite auf die
Telefonnummer tippt, landete bei einem anderen Anschluss.

Refs #83

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VyiQJ8BM3hcqH3E3sPvg1N
Phil merged commit ffdb708f7d into main 2026-09-07 09:20:24 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Phil/philflow.io!96
No description provided.