Skip to content

refactor(i18n): show the code view, logs, updates, Teleport, and Go To in Fluent - #910

Merged
penso merged 3 commits into
mainfrom
i18n/strings-views
Oct 30, 2026
Merged

penso merged 3 commits into
mainfrom
i18n/strings-views

Conversation

@penso

@penso penso commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

Summary

Part of Phase 2 of docs/i18n.md (string migration), following #880's patterns. This PR covers the smaller views in my scope. The browser and chats follow in their own PRs. English text is unchanged except for one plural noted below.

Each module is marked // i18n: migrated and has its own .ftl file, so the parallel migrations don't share a catalog:

Surface Module Catalog
Code tabs (outline, header, definition kinds) code_view code-view.ftl
Opening a file in the terminal editor editor editor.ftl
Log window (controls, sources, status line) log_window log-window.ftl
Color scheme picker theme_picker theme-picker.ftl
App Updates and its release notes update_panel, release_notes; herdr-updater reports install steps as a typed Progress update-panel.ftl
Teleport dialog, every stage teleport teleport.ftl
Palette Go To rows, badges, agent filter, preview facts, "Last seen" palette palette-go-to.ftl
Palette project rows and the new-project row palette palette-projects.ftl

Plurals. Teleport's "commit(s)", "file(s)" and "warning(s)" and the theme picker's count are now Fluent selectors. The only visible English change: "1 of 1 themes" now reads "1 of 1 theme".

Teleport. Step names and pane descriptions ("claude: resume session", "Run cargo test") were English strings from herdr-remote. The app now picks the message by variant in teleport/text.rs, and herdr-remote keeps its English for logs and #[error]. Each review destination is one whole sentence per variant instead of a sentence built from fragments. herdr-remote's test-support exports gain Node, SourceState and TabPlan so the leak test can build a review. Production API is unchanged.

Palette. Go To's badges and status words are messages. Search still matches the English status words and "agent" as well as the translated ones. The agent filter chips' test selectors now use stable names instead of their labels.

Data, not messages. The editor's shell scripts and Neovim command (// i18n: data), names, paths, versions, the release notes themselves, and Teleport's warnings.

Moved tests. release_notes.rs and palette/projects.rs kept their tests inline. Those tests move to release_notes/tests.rs (with structure.rs under tests/) and palette/projects/tests.rs, so the modules can be marked migrated. The test bodies are unchanged.

Left as is. $error placeables and the updater's $reason keep their English Display; another agent is localizing errors. The relative age inside "Last seen { $age }" still comes from herdr-vcs's checkpoint::age, which is the separate relative-times item in "What is left".

The second commit reports the updater's own install steps ("Starting Homebrew..." and so on) as herdr_updater::Progress variants the panel translates; what Homebrew or a system package prints stays data, and the command line keeps English. It also fixes the code tab's leak test on Windows, where the header truncated the temp path down to its drive letter.

docs/i18n.md's "What is left" and its list of leak tests are updated.

Validation

  • just format
  • just ci on 1e942e98c (macOS arm64, after merging main): passed. 15200 Rust tests, 0 failed.
  • New en-XA leak tests pass: log window, theme picker, code tab, every App Updates state including each install step, every Teleport stage (no hosts, choosing, reviewing, ready with a token and without GitHub, starting, moving), and Go To.
  • just lint-linux and just lint-windows: clean (the updater's Homebrew and Linux install code is cfg-gated).
  • Native check under QA > Pseudo-Locale > Accented (en-XA): open the log window, the theme picker, a code tab with its outline, App Updates (QA preview), Teleport from a worktree's menu, and Go To (palette > Navigation), and check for unbracketed or clipped text.
  • The same surfaces under Right to Left (en-XB).
  • In English, the same surfaces read as before, apart from the theme count's singular.

Screenshots

No native screenshots: none were captured in this session, and no desktop interaction was done. Apart from the singular theme count, English rendering should be unchanged.

…o in Fluent

Phase 2 of docs/i18n.md for the smaller views: the code view and editor,
the log window, the theme picker, App Updates and its release notes,
Teleport's dialog, and the palette's Go To and project rows. Each module
is marked `// i18n: migrated` and keeps its English in its own .ftl file
(code-view, editor, log-window, theme-picker, update-panel, teleport,
palette-go-to, palette-projects), so parallel migrations do not share a
catalog.

- Hand-built plurals become Fluent selectors: Teleport's unpushed commits,
  changed files and warnings, and the theme count.
- Teleport's step names and pane descriptions are chosen by variant in the
  app (teleport/text.rs); herdr-remote keeps its English for logs and
  errors. Its test-support exports gain the review types the leak test
  builds.
- Go To badges, status words, preview facts and the agent filter are
  messages; search still matches the English status words, and the filter
  chips' test selectors are stable names rather than their labels.
- release_notes' inline tests move to release_notes/tests.rs, and
  palette/projects' to palette/projects/tests.rs, so the modules can be
  marked migrated.
- Each surface has an en-XA leak test: the log window, the theme picker,
  a code tab, every App Updates state, every Teleport stage, and Go To.

$error and the updater's $reason placeables keep their English Display.
@penso

penso commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner Author

just ci ran locally and passed on 1e942e98c (macOS arm64, merge of main): 15200 Rust tests, 0 failed. Extra recipes run on 5538ce347: just lint-linux and just lint-windows (both clean); the merge changed no cfg gate.

@greptile-apps

greptile-apps Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no actionable defects were found.

Summary

Moves code tabs, logs, the theme picker, App Updates, Teleport, and palette navigation/project text into Fluent.

  • Code tabs and editor actions use translated interface text.
  • The log window uses translated labels for its controls and status.
  • Go To and project rows use translated labels and badges.
  • Teleport reviews and progress labels use translated text.
  • The theme picker translates its labels and counts.
  • App Updates translates its messages and installer progress.

Reviews (2) · Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." · Reviewed by Greptile

App Updates showed the updater's own install steps, such as "Starting
Homebrew...", in English. The updater now reports them as a typed
`Progress`, with the lines Homebrew or a system package prints kept as
data, and the panel words each step from update-panel.ftl. The Linux
helper prints its steps over a pipe, so its one step is parsed back at
that boundary. The command line keeps the English wording.

The App Updates leak test now covers every install step, and the code
tab's leak test treats any piece of its truncated path as data: on
Windows the header cut the temp path down to its drive letter.
@netlify

netlify Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for herdr-ui canceled.

Name Link
🔨 Latest commit 1e942e9
🔍 Latest deploy log https://app.netlify.com/projects/herdr-ui/deploys/6ae4de3e2ade022fa6458f81

# Conflicts:
#	crates/herdr-gpui/src/theme_picker.rs
#	docs/i18n.md
@penso

penso commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

@greptileai review

@penso
penso merged commit 015e2d2 into main Oct 30, 2026
27 checks passed
@penso
penso deleted the i18n/strings-views branch October 30, 2026 21:22
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.

1 participant