Skip to content

feat(langs): redesign the translations section as a master/detail studio - #16

Merged
sara-gnucoop merged 3 commits into
devfrom
feature/translation-restyle
Sep 4, 2026
Merged

feat(langs): redesign the translations section as a master/detail studio#16
sara-gnucoop merged 3 commits into
devfrom
feature/translation-restyle

Conversation

@tulas75

@tulas75 tulas75 commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

The Traduzioni page was a flat list of keys with language tabs exposing one column at a time, no inline editing, no indication of what was missing, and a silent 50 row cap whenever the search box was empty.

It is now a translation studio: a searchable key list with per key completion rings and a "to translate" filter on the left, and a detail pane on the right with one editable field per language, per language status and live completion.

  • LangsStore keeps the page state and a buffer of the edits: the completion recomputes while typing, and the saves are debounced per key and serialized, because updateLang rewrites a whole language document from a snapshot and two overlapping calls would drop each other changes.
  • The key list is virtualized: the union of the dictionaries is several hundred keys and the cap that used to hide them is gone.
  • The langs dialogs are restyled: "Tutte le lingue" reviews, imports and exports the dictionary of a language, "Nuova traduzione" creates a key and, when wanted, its translations.
  • The colors follow the app theme through angular-material-css-vars, so the studio also follows the existing dark mode toggle.

LangsUpdateDialog, LangsExportDialog, LangsFilterPipe, AsStringPipe and ObjectLengthPipe are dropped: inline editing and the new dialogs replace them.

Adding and deleting a language are no longer reachable from the UI: the new "Tutte le lingue" dialog does not expose them.

tulas75 and others added 3 commits August 9, 2026 12:48
The Traduzioni page was a flat list of keys with language tabs exposing one
column at a time, no inline editing, no indication of what was missing, and a
silent 50 row cap whenever the search box was empty.

It is now a translation studio: a searchable key list with per key completion
rings and a "to translate" filter on the left, and a detail pane on the right
with one editable field per language, per language status and live completion.

- LangsStore keeps the page state and a buffer of the edits: the completion
  recomputes while typing, and the saves are debounced per key and serialized,
  because updateLang rewrites a whole language document from a snapshot and two
  overlapping calls would drop each other changes.
- The key list is virtualized: the union of the dictionaries is several hundred
  keys and the cap that used to hide them is gone.
- The langs dialogs are restyled: "Tutte le lingue" reviews, imports and exports
  the dictionary of a language, "Nuova traduzione" creates a key and, when
  wanted, its translations.
- The colors follow the app theme through angular-material-css-vars, so the
  studio also follows the existing dark mode toggle.

LangsUpdateDialog, LangsExportDialog, LangsFilterPipe, AsStringPipe and
ObjectLengthPipe are dropped: inline editing and the new dialogs replace them.

Adding and deleting a language are no longer reachable from the UI: the new
"Tutte le lingue" dialog does not expose them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…he list

  selected$ resolved the selection as "the first visible row" on every emission, so
  completing the selected key dropped it out of the "to translate" filter and moved the
  detail pane while the user was still typing in it: the keystrokes that followed were
  saved on whatever key took its place.

  The first visible key is now selected outright, and picked again only when the filter
  changes - an explicit selection is left alone.
@sara-gnucoop
sara-gnucoop self-requested a review September 3, 2026 13:50
@sara-gnucoop
sara-gnucoop merged commit 4ea832c into dev Sep 4, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants