BlueGit

golden-age paperdoll-renderer

design: English/Dutch UI language setting with translation table (Tim t1004u)

timfa Grok Bot · pushed by timfa

Authored 2026-11-07 · 6 days ago

Hash
6e61f5e3d1ba31693ec77609132e0da5ad5edf54
Parent
d08c7597
1 file changed +11 −0
design.md +11 −0
@@ -505,3 +505,14 @@ Decision (superseded and reverted per Tim t991u, see below): automatic per-body
505 505 - During a render, the live pass preview of the depth map shows the bytes actually written to the depth PNG, in the chosen encoding and bit depth. It uses the same display rule as the 2D previewer map modes (t992u): `gray` is shown as grey, `rgb_bands`/`rgb_packed` as raw RGB, and 16-bit samples are rounded to 8 bits for display.
506 506 - A depth file kept by a resume is shown from its stored bytes.
507 507 - The former separate high-byte grey preview image (`depth_preview`) is removed. No depth translation exists for display anywhere. Only the compositor/relighting decodes depth.
508
509 ## Decision 2026-11-07 (Tim t1004u): UI language setting, English default
510 - The UI supports **English** (default) and **Nederlands**. The language can be switched at runtime from a new **Settings** window, reachable from the start screen and the toolbar. It takes effect on the next frame and needs no restart. The choice is stored as `settings.json` (`{"language": "en"|"nl"}`) in the same user config directory as `recent.json`; an unreadable file falls back to English.
511 - Translation table: the Dutch source text is the key, and `src/i18n_table.rs` maps each user-visible string to English. This covers labels, buttons, hints, status notices, progress labels and every error message, including backend errors that reach the UI. Entries can be format templates: `{…}` holes are matched at display time and translated recursively, so composed messages ("atlas: {rel}: {e}") translate part by part. Text that has no entry is shown unchanged.
512 - All UI text goes through `i18n::t` at the display boundary (egui labels/buttons/hover texts/windows, notices, dialog titles). Backend code keeps its Dutch source strings and needs no language plumbing. Files, manifests and CLI tokens are never translated.
513 - Tests:
514 - every table entry has a non-empty English text with the same set of `{…}` placeholders;
515 - every user-visible literal in `src/` (outside tests, with a space or an accented letter) has a table entry;
516 - templates translate composed messages;
517 - switching the language changes the output at runtime.
518 - The README is in English.
@@ -505,3 +505,14 @@ Decision (superseded and reverted per Tim t991u, see below): automatic per-body
505- During a render, the live pass preview of the depth map shows the bytes actually written to the depth PNG, in the chosen encoding and bit depth. It uses the same display rule as the 2D previewer map modes (t992u): `gray` is shown as grey, `rgb_bands`/`rgb_packed` as raw RGB, and 16-bit samples are rounded to 8 bits for display.
505- During a render, the live pass preview of the depth map shows the bytes actually written to the depth PNG, in the chosen encoding and bit depth. It uses the same display rule as the 2D previewer map modes (t992u): `gray` is shown as grey, `rgb_bands`/`rgb_packed` as raw RGB, and 16-bit samples are rounded to 8 bits for display.
506- A depth file kept by a resume is shown from its stored bytes.
506- A depth file kept by a resume is shown from its stored bytes.
507- The former separate high-byte grey preview image (`depth_preview`) is removed. No depth translation exists for display anywhere. Only the compositor/relighting decodes depth.
507- The former separate high-byte grey preview image (`depth_preview`) is removed. No depth translation exists for display anywhere. Only the compositor/relighting decodes depth.
508
509## Decision 2026-11-07 (Tim t1004u): UI language setting, English default
510- The UI supports **English** (default) and **Nederlands**. The language can be switched at runtime from a new **Settings** window, reachable from the start screen and the toolbar. It takes effect on the next frame and needs no restart. The choice is stored as `settings.json` (`{"language": "en"|"nl"}`) in the same user config directory as `recent.json`; an unreadable file falls back to English.
511- Translation table: the Dutch source text is the key, and `src/i18n_table.rs` maps each user-visible string to English. This covers labels, buttons, hints, status notices, progress labels and every error message, including backend errors that reach the UI. Entries can be format templates: `{…}` holes are matched at display time and translated recursively, so composed messages ("atlas: {rel}: {e}") translate part by part. Text that has no entry is shown unchanged.
512- All UI text goes through `i18n::t` at the display boundary (egui labels/buttons/hover texts/windows, notices, dialog titles). Backend code keeps its Dutch source strings and needs no language plumbing. Files, manifests and CLI tokens are never translated.
513- Tests:
514 - every table entry has a non-empty English text with the same set of `{…}` placeholders;
515 - every user-visible literal in `src/` (outside tests, with a space or an accented letter) has a table entry;
516 - templates translate composed messages;
517 - switching the language changes the output at runtime.
518- The README is in English.