feat(i18n): German editor catalog and layout pass #237
No reviewers
Labels
No labels
bug
enhancement
needs-triage
ready-for-agent
ready-for-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/deckle!237
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "afk/226"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ships the editor in German: a complete
decatalog, the agreed glossary terms, and a layout pass so the longer German strings fit the chrome.Closes #226
Catalog
web/src/i18n/de.json: all 1171 keys — UI strings, plural forms (.one/.other;Intl.PluralRules("de")has only those two, so no third form is needed), andserver.*for every exported error code, with exactly the English placeholders ({x},{x|q},{x|list}).glossary.md: the Terms table now has a binding German column — the issue's terms (Veröffentlichen, Ausstehende Änderungen, Verwerfen, Rückgängig, Seite, Bereich, Element, Mediathek, Entwurf, Übersetzung, Nicht verwendete Inhalte, Live-Website, Speichern) plus ~60 more settled during a consistency pass (slot → Spalte, so it never clashes with section → Bereich; Aufklappen/Zuklappen; Bereitstellung; Verweis; …), and notes on language-label placeholders.catalog.tsships{ en, de }; the parity test coversde(every used key, every server code, nothing unused, no stray placeholders).i18nShell.test.tsx): boots withAccept-Language: de-AT,de,en, assertslocale() === "de",html[lang="de"], the rail's "Medien", and a server error translated by code; plus a baredehost choice formatting under the browser'sde-CH. Tests that useddeas the "no catalog" example now usefr.de-AT,de-DE, …) — acceptable, no custom key set needed.scaffold/site/AGENTS.mdsay the editor ships English and German. Skills checked:setup-siteandverify-sitealready say the editor follows the browser's language and point at AGENTS.md "Languages" — still accurate, unchanged.Layout pass (
web/src/styles.css)Measured with a headless-Chromium script that walks the editor on a copy of
testdata/multilingual-siteand reports clipped/overflowing elements, at 1280px and 720px (the narrowest width the stylesheet targets:@media (max-width: 720px)/@container shell (min-width: 721px))..app's column wasauto, so it grew to the body's min-content (up to 1080px in German, 952px in English) and clipped the docheader's right side — language switch, badges, Hugo pill. Nowminmax(0, 1fr).Overflow findings German adds over English: before 0 at 1280 / 66 at 720 → after 0 / 0. English at 1280 is pixel-identical apart from the unsaved-changes dialog; at 720 English also stops clipping. Full vitest suite green (116 files, 2862 tests),
make test,make build,go vet,tscclean.Not covered: the page tree has no filter field (filters exist only in the link/page pickers), and the rail is icon-only, so neither had German text to fit.
Follow-up
A few form labels are generated by the engine in Go, not the site ("Address segment" on translation forms, the implicit "Title", "Backend layout"), so they stay English in a German editor. The issue kept the server out of scope; filed as #236.
Screenshots
English (after) · German before · German after. The images live on the orphan branch
screenshots/issue-226(commite0b0dd5), which is never merged; nothing on this branch adds them to the tree.720-page-tree1280-page-tree720-slug-error720-props-de-access720-element-form-error720-confirm-unsaved1280-confirm-unsaved720-publish-running1280-publish-running720-pending1280-pending720-page-pending720-media-detail720-insert1280-insert1280-error-stripFor the German-speaking reviewer
Strings the consistency pass flagged as worth a native look:
element.move.droppedContainer,element.move.media,translate.subtitle("aus {source}"),translate.subpages.*,form.items.noSchema.🤖 Generated with Claude Code
[autoland] verdict: pass
Lander verdict: CONCERNS (non-blocking), approved but not auto-merged
CI:
labctl pr checks 237→success.ci / build-and-testpassed in 16m20s; it runsnpm ci && npm run build && npm test(vitest), thengo vet ./...,go test ./...andgo build.ci / releasewas skipped (it only runs on pushes to main). That covers every path this diff touches, so nothing was re-run locally.Conventions: all met.
Closes #226.README.mdandscaffold/site/AGENTS.md.deexport inweb/src/i18n/index.ts, which doesn't change behaviour.de.jsonhas exactly the 1171 keysen.jsonhas. The existingi18nParity.test.tsloops overcatalogs, so it now checks German too.Concerns (worth a maintainer's eye before merging)
Screenshot binaries end up permanently in main's history.
e4dc1dcadds 48 PNGs underdocs/screenshots/issue-226/(~2.6 MB) andc99adc5deletes them again. The tree on main is unchanged, but a merge commit (the style #228/#229 used) keeps both commits on main for good. The current pack is ~6.3 MB, so this adds roughly 40%, and nothing on main has done this before. A squash merge keeps the blobs out, but the screenshot links in this PR's body (raw/commit/e4dc1dc…) stop working once the branch is deleted and the objects are garbage-collected. A maintainer should pick deliberately: merge commit (keep the images, accept the bloat), squash (lose the image links), or move the images to PR attachments first.The issue expects a native German review, and it hasn't happened yet. #226's Decisions put the catalog in its own issue "so a German-speaking reviewer can review the translation in isolation", and the PR flags strings for a native look. The translation reads idiomatically and follows the glossary. One string drifts slightly in meaning:
web/src/i18n/de.json:87,element.move.droppedContainer: "Damit die Übersetzung erhalten bleibt" ("so that the translation is kept"). The English "to keep it" means the moved element.Also worth checking:
web/src/i18n/de.json:93,element.move.mediaweb/src/i18n/de.json:191,form.items.noSchemaweb/src/i18n/de.json:1066-1067,translate.subpages.*web/src/i18n/de.json:1070,translate.subtitleNit, not a concern: the reflowed doc comment in
web/src/i18n/index.ts:26runs past the file's usual wrap width.c99adc5e0e792977f3d2Resolves concern 1 of the lander verdict: the branch was rewritten to drop
e4dc1dc(adds the 48 PNGs) andc99adc5(removes them again). The tip is now792977f, whose tree is identical to the previous head, so no code changed. The images now live on the orphan branchscreenshots/issue-226(commite0b0dd5), which is never merged; the screenshot table in the description links there. Delete that branch once the images are no longer needed.