Repository navigation
refactor(i18n): show the window's notices and tab faces through Fluent - #941
Merged
Merged
Conversation
#905 (iOS app, one pairing for every machine) and #926 (localized errors) merged independently. #905 moved herdr-automate's binary, checksum, and platform failures into host_build::Error and added herdr_client::Error::TerminalAttach, remote control's app::Error::Enroll, and the root Error::Nearby, none of which had a Localize mapping, so main no longer compiled. Each new enum gets its own mapping and .ftl file, as #926 set out: host_build (error-host-build.ftl, which takes over the three automation messages), terminal_attach (error-client-terminal-attach.ftl), nearby (error-nearby.ftl), and enroll (in error-remote-control.ftl). Per-variant tests cover each. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFavh5CsF9aiVsJURUwioh
Part of Phase 2 of docs/i18n.md, following #880. Toasts, flashes, the config diagnostic cards, the agent skill offer, and the window's command notices take their text from window-notices.ftl and notifications.ftl; the tab faces' muted hint and close button from tab-layout.ftl. - Marked migrated: notifications.rs, tab_layout.rs, and in window/ the toasts, flash, system notifications, config diagnostic, commands, monitors, zen, and Shift-select hint modules. D-Bus and registry names in the system notification backends are tagged as data. - Errors reaching these notices use localize() instead of to_string(): request failures, the agent skill install, keep-awake, checkpoint restores, and dismissing the announcement. - The skill install's place count is a Fluent selector. - notifications.rs's inline test module moves to notifications/tests.rs. - A new en-XA leak test covers each toast preview, a hint and a flash, the status line's error, the config diagnostic card, and the agent skill offer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFavh5CsF9aiVsJURUwioh
Collaborator
Author
[Medium impact] No new blocking issue was found in the reviewed changes. SummaryMoves window notices and tab labels into Fluent.
No new findings were accepted. The supplied previous threads have no comment numbers, so they receive no numbered classifications. Reviews (2) · Last reviewed commit: "fix(i18n): keep preview direction marks ..." · Reviewed by Greptile |
# Conflicts: # crates/herdr-gpui/locales/en-US/error-client-terminal-attach.ftl # crates/herdr-gpui/locales/en-US/error-host-build.ftl # crates/herdr-gpui/locales/en-US/error-nearby.ftl # crates/herdr-gpui/locales/en-US/error-remote-control.ftl # crates/herdr-gpui/src/i18n/errors/client/terminal_attach.rs # crates/herdr-gpui/src/i18n/errors/host_build.rs # crates/herdr-gpui/src/i18n/errors/nearby.rs # crates/herdr-gpui/src/i18n/errors/remote_control.rs # crates/herdr-gpui/src/i18n/errors/tests/nearby.rs
8 of 12 tasks
Greptile on #941: Notice::new cleans daemon text with safe_text, which also stripped the direction marks en-XB puts in the QA toast and system notification previews; previews now set their title and body from the messages afterwards. A failed checkpoint restore's flash lost the cause checkpoint::describe used to append; a failed Git script's or worker's error now follows the message. Also puts host_build.rs's keep-sorted end marker back on its own line, which main's rustfmt had folded away. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BFavh5CsF9aiVsJURUwioh
Collaborator
Author
|
@greptileai review |
This was referenced Nov 1, 2026
shin1ohno
added a commit
to shin1ohno/herdr-gpui
that referenced
this pull request
Nov 1, 2026
Brings in upstream's 16 commits, among them the native Herdr Remote app and one pairing for every machine (sheprd-labs#905), the device picker rebuilt as unfolding devices (sheprd-labs#939), and the i18n Fluent migrations with exhaustive error mappings (sheprd-labs#913, sheprd-labs#915, sheprd-labs#924, sheprd-labs#925, sheprd-labs#926, sheprd-labs#941). Conflicts: upstream's picker, sessions and usage code win; the iPad's needs are re-applied on top. The iPad's Sessions entry now lives on the unfolded SSH Herdr 1 device (the old footer button and Page::Sessions are gone upstream). Every error variant this branch added has a Fluent message, and the iPad's cloud, update and remote notices say iPadOS instead of Windows. The local scan never runs on iPad. On the desktop, the picker and sidebar read the selected device's connection state from the window, as this branch did before. View-level iPad picker and Sessions behaviour is type-checked; its pure predicates run in the host tests.
penso
added a commit
that referenced
this pull request
Nov 1, 2026
… Fluent (#954) * refactor(i18n): show the config diagnostic and icon font text through Fluent Part of Phase 2 of docs/i18n.md. The GUI config diagnostic (Config::diagnostic) and the icon font notice now build their lines from config-diagnostic.ftl, so the cards #941 labeled read in the window's language. Unknown-key and missing-font lists are whole sentences with a selector for the "and N more" remainder. The cards used to clean every line with safe_text, which drops the isolation and direction marks a right-to-left language needs. Daemon text still goes through that; the app's own text uses ConfigDiagnostic::sync_own, which only bounds it, and the names from the user's file are cleaned before they join a message. config/ is marked migrated: font and theme names, registry keys, the seeded overrides file, and serde's own parser text are data. The inline tests of config/preferences.rs and config/sidebar.rs move to their own files. * test: compare the config diagnostic's English without isolation marks Config::diagnostic now builds its lines from messages, so the remaining test that compared it verbatim strips the marks Fluent adds, and the GUI diagnostic card tests feed it through sync_own as the window does. * fix(i18n): rewrite the config and icon font cards after a language switch QA > Pseudo-Locale only redraws the windows, so the GUI config card kept the language it was built in until the next config reload. The window's tick now asks the card to write its text again when the shown locale differs from the one it was written in, keeping a dismissal or an opened card, since it is the same warning in another language. The icon font notice formatted its two messages on every tick once a missing font was detected, even after a dismissal. It now writes them once, and again only after a language switch. * test: dismiss the accented icon font card without unwrap
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Part of Phase 2 of
docs/i18n.md, following #880's patterns. This PR covers the first sub-area of the main window's notices: toasts, flashes, notifications, and the tab faces' muted hint. Input, paste, transfer, find, copy mode, and annotation text inwindow/follow in their own PRs.window-notices.ftl(flashes, the status line's request failures, the config diagnostic cards, the agent skill offer, zen mode, the Shift-select hint, checkpoint restores) andnotifications.ftl(the untitled notice and the QA toast and system notification previews).tab-layout.ftlgains the muted hint and the close button's name.// i18n: migrated:notifications.rs,tab_layout.rs, and inwindow/:toasts,flash,system_notifications,config_diagnostic,commands,monitors,zen, andselect_hint. D-Bus names and Windows registry keys in the system notification backends are tagged// i18n: data.Stringwithto_string()now uselocalize(): request failures, the agent skill install, keep-awake, checkpoint restores, and dismissing the announcement. A failed restore's flash still names its cause (previouslycheckpoint::describe's English chain): a failed Git script's or worker's error follows the message, so Git's output or the SSH failure stays in view.Notice::new, whosesafe_textcleanup of daemon text would strip the direction marksen-XB(and a right-to-left language) needs.window/toasts/tests/mirrored.rschecks a preview keeps its en-XB marks, andwindow/monitors/tests.rschecks a failed restore keeps its cause.notifications.rs's inline test module moves tonotifications/tests.rs, as AGENTS.md asks. A newwindow/tests/en_xa_notices.rsleak test covers each toast preview kind, a hint, a flash, the status line's error, the config diagnostic card, and the agent skill offer.docs/i18n.mdis updated.Still English
Config::diagnostic) and the icon font notice put inside those cards. Only the cards' own label is a message. Both modules are outsidewindow/. Noted in "What is left".window/: input, paste, transfer, images, find, copy mode, selection, and annotation (next PRs).No visible change in English.
Screenshots
Native macOS captures, debug build, against an isolated sandbox daemon. The config card's body is the config module's own text, which is still English (see above).
QA
just formatjust cionae2cb7063(macOS arm64, after merging main): passed, 16,288 tests, 0 failed; check-i18n: 3642 messages in 156 files valid and usedjust lint-linux,just lint-windowsona77e4834a: passed (the later commits touch nocfggate)🤖 Generated with Claude Code
https://claude.ai/code/session_01BFavh5CsF9aiVsJURUwioh