Skip to content

fix(ui): translate onboarding and the menu bar, unclip meeting retention and Labs' unload menu - #1763

Open
kitlangton wants to merge 3 commits into
devfrom
ui-audit-fixes
Open

kitlangton wants to merge 3 commits into
devfrom
ui-audit-fixes

Conversation

@kitlangton

@kitlangton kitlangton commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

Six fixes from the 3.4.0 UI audit: onboarding and the menu bar now follow the interface language, a meeting's retention no longer gets cut off, Labs' "Unload after" menu fits its card, and a failed shortcut shows only Reopen Hex.
Nothing changes for English speakers except the meeting retention line and the failed-shortcut page. Audit items 1 (still deciding the copy) and 6 (merged in #1750) aren't here.

❌ Before

  1. Meetings: "Deleted after 24 ho…" was cut off on the date line.
  2. Windows and Linux onboarding said "this Mac".
  3. When the shortcut didn't start, the practice still told you to hold it, next to the Reopen Hex prompt (and a second Reopen Hex up top).
  4. Onboarding's badges, buttons, and "Hold ⌥ and say…" instructions stayed in English in every language.
  5. The macOS menu bar menu was always English.
  6. In German at 860×560, Labs' "Unload after" choices ran past the right edge of their card.

✅ After

  1. Retention sits on its own line under the date and wraps instead of truncating.
  2. "Hex hears you on this computer. Your voice never leaves it.", translated.
  3. Only the reason and one Reopen Hex button, until the listener is ready. Hex is ready keeps its top banner.
  4. Every onboarding string is translated; the keycap is a {keys} placeholder each language can place where its grammar wants it.
  5. The menu follows the interface language: macOS title case in English, the window's labels otherwise. Fixed rows retitle when the menu opens; meeting, pause, and update rows with their own updates. Meeting titles are never translated.
  6. "Unload after" is a dropdown like the ones in General, so it fits any language.
- meta line: date · length · app · Deleted after 24 ho…
+ meta line: date · length · app
+ Deleted after 24 hours            // own wrapping line
- practice: hold prompt + hint + idle pill + Reopen Hex (×2)
+ practice: "Hex's shortcut didn't start." + Reopen Hex
- menu item: "Record Meeting"       // always English
+ menu item: english ? "Record Meeting" : tr("Record meeting")

📊 Proof

Meetings: retention on its own line

❌ Before ✅ After
light
dark

Labs › Unload model when idle, German, 860×560

❌ Before ✅ After
light
dark

The shortcut didn't start

❌ Before ✅ After
light
dark

Practice, Chinese

❌ Before ✅ After
light
dark

Hex is ready, Chinese

❌ Before ✅ After
light
dark

Windows/Linux onboarding, English ("this computer")

❌ Before ✅ After
light
dark

The status menu is native AppKit, so it has no scene; the_menu_follows_the_interface_language checks idle, recording (meeting title kept), and update-ready titles in English and Chinese. New tests: the_practice_and_ready_pages_are_translated (zh), a_shortcut_that_did_not_start_shows_only_reopen, unload_after_fits_its_card_in_a_small_translated_window (de, 860×560, last option and focus ring inside the card). Goldens were regenerated on Linux (23 images: the "this computer" privacy line, the meeting retention line, and the reopen page), and I looked at each one.

Follow-up, not here: the "Open Hex when your Mac starts?" login row still says "Mac" and "menu bar". It shows only on macOS, so that's correct today, but the copy should change if the row reaches Windows or Linux.

👀 Read: src/macos_rune/status_item.rs, label() and relabel(): English keeps the hand-written title-case strings, and every other language uses the window's sentence-case key, with a trailing … added back where macOS expects it. onboarding_kit/landing.rs around_keys splits a translated sentence at {keys}. The rest is routine.

🔍 Found in the 3.4.0 UI audit · no user reports · stills from hex app -- --snap

Checks run
  • scripts/check i18n: 26 passed
  • cargo nextest run -E 'test(/rune_ui|i18n/) - test(the_first_run_moves_cleanly)': 485 passed
  • cargo nextest run status_item: 9 passed
  • cargo clippy --locked --all-targets -- -D warnings: clean
  • Check Linux (workflow_dispatch on this branch): pass, goldens included
  • motion_gate::the_first_run_moves_cleanly times out locally at 120 s on unchanged dev too, so it was left out above

This branch has not been deployed

No deployments
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