design: English/Dutch UI language setting with translation table (Tim t1004u)
@@ -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-body505
- 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 default510
- 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.