Label icon-only chrome buttons and localize project panel text
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 anaccessibilityLabelthat reuses the same localized string as the tooltip. These buttons render throughCmuxSystemSymbolImage, 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
.isSelectedtrait instead of a spoken "selected" prefix. - Command palette: rows no longer set
accessibilityValue(row.id). The id moved into the identifier, nowCommandPaletteResultRow.<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
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
.isSelectedtrait 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.