Label icon-only chrome buttons and localize project panel text

Merged
TE
20d ago
+562-52

VoiceOver announced several icon-only chrome buttons as unlabeled images, read internal command ids aloud on every command palette row, and the Xcode project panel showed hard-coded English. This labels those controls and localizes the panel text.

  • Browser toolbar: Back, Forward, Reload/Stop (follows isLoading), Developer Tools, Profile, and Theme get an accessibilityLabel that reuses the same localized string as the tooltip. These buttons render through CmuxSystemSymbolImage, which has no accessibility description, so the label was otherwise empty. The omnibar label is now localized (browser.omnibar.accessibilityLabel).
  • Omnibar suggestions: a row's value is now just its text, and the highlighted row carries the .isSelected trait instead of a spoken "selected" prefix.
  • Command palette: rows no longer set accessibilityValue(row.id). The id moved into the identifier, now CommandPaletteResultRow.<index>.<commandId>, so UI tests still find rows by command id without VoiceOver reading it.
  • Notifications: the popover row's hover clear X gets a label and tooltip, and the Notifications page clear button gets the matching tooltip (both reuse notifications.row.clear).
  • Project panel: reload tooltip, reload-error banner, Scheme/Configuration picker titles, and the Loading/Failed status now use String(localized:). The icon-only reload and dismiss buttons get labels, and dismiss gets a tooltip.

UI tests that read the palette row value now match on the identifier (BEGINSWITH "CommandPaletteResultRow." AND ENDSWITH ".<id>"), and SidebarHelpMenuUITests checks rank through CommandPaletteResultRow.0. / .1. identifiers. BrowserOmnibarSuggestionsUITests reads selection through XCUIElement.isSelected, following the same trait pattern BrowserDesignModePopover already uses.

8 new keys, each with all nine required locales. Existing keys were reused wherever one already existed.

Validation: python3 scripts/localization_catalog.py check reports 0 parity errors. I didn't build or run anything locally, so compile and UI test results come from this PR's CI.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Fixes VoiceOver announcing icon-only chrome buttons as unlabeled images and reading internal command ids aloud, and localizes the Xcode project panel text.

Accessibility

  • Browser toolbar Back, Forward, Reload/Stop, Developer Tools, Profile, and Theme buttons and the notification clear buttons now reuse their tooltip text as accessibility labels.
  • Command palette rows no longer set the spoken value to the command id; the id moved to the identifier (CommandPaletteResultRow.<index>.<commandId>), and UI tests match on it.
  • Omnibar suggestion rows expose selection via the .isSelected trait instead of a spoken "selected" prefix.

Localization

  • Project panel reload, dismiss, picker titles, and loading/failed status now use String(localized:), and the changelog documents the fix.