Skip to content

Add a language picker, English default and accessibility settings - #1

Merged
YossiYad merged 1 commit into
mainfrom
feature/i18n-accessibility
Sep 23, 2026
Merged

YossiYad merged 1 commit into
mainfrom
feature/i18n-accessibility

Conversation

@YossiYad

Copy link
Copy Markdown
Owner

What changed

Language

  • The app now starts in English. The first launch asks which language to use, with each option written in its own language. The choice is saved, and closing the card without picking keeps English. Listeners who never picked a language (previously detected from the browser) see the question once.
  • The setting is now the first row in Settings > Look, titled "Language · שפה" so it can be found by readers of either language.
  • AI playlist names, clarifying questions and mix names are requested in the chosen language. Spoken replies are English in the English interface, and suggested podcasts follow the choice. Song titles and artist names are never translated.
  • Hebrew keeps the existing interface exactly as before.
  • The guest page still follows the browser until a guest picks a language.

Accessibility (Settings > Look)

  • Text size (Default / Large / Larger) scales lists, sheets, dialogs, toasts and bar labels. Swipe and reorder gestures account for the scale, so rows still follow the finger.
  • High contrast brightens secondary text and outlines. It also applies automatically with the system's prefers-contrast: more.

Other accessibility fixes

  • Escape closes the open dialog or sheet.
  • Solid keyboard focus ring on buttons, links and sliders.
  • Toasts are announced to screen readers (role="status").
  • The tab bar is marked as navigation with aria-current, replacing a tablist whose buttons were never tabs.
  • Settings choice groups are labelled with their row title.
  • The driving-mode voice layer is right-to-left only in Hebrew.

APP_VERSION and the service worker cache are bumped to v204.

Validation

  • node --test tests/*.test.js: 944 passed, including new tests for the English default, the first-launch question and the AI reply language.
  • tsc -p jsconfig.json: clean. git diff --check: clean.
  • New browser test tests/accessibility-ui.cjs: passes at 320, 393 and 1024 px. It covers text size, high contrast (setting and system preference), Escape, dialog fit, aria-current and labelled groups.
  • Browser tests updated to seed the language they are written in. language-ui.cjs now also covers the first-launch picker for English and Hebrew browsers.
  • Passing: language-ui, mobile-sheet, playlist-order-ui, podcast-library-ui, queue-history-ui, remote-playback-ui, shared-queue-ui, tv-receiver-ui, voice-browser and landing-ui.
  • Failing on unchanged main as well: media-stack and shared-queue-gateway need podman. mobile-keyboard fails at the same "input follows viewport pan" assertion on main.
  • Not yet verified on real devices: text size on iOS Safari and Android Chrome, and VoiceOver/TalkBack announcements.

Generated by Claude Code

The app now starts in English and asks once, on the first launch, which
language to use. Each option is written in its own language, and the
choice is saved. It can be changed at any time in Settings > Look under
"Language · שפה", titled in both languages so it can be found either way.

AI playlist names, clarifying questions and mix names are requested in
the chosen language, spoken replies follow it, and suggested podcasts
follow it too. Song titles and artist names are never translated. The
guest page still follows the browser until a guest picks a language.

Settings > Look also gains:
- Text size (Default, Large, Larger), which scales lists, sheets, dialogs,
  toasts and bar labels. Swipe and reorder gestures account for the scale
  so rows still follow the finger.
- High contrast, which brightens secondary text and outlines, and also
  applies when the system asks for more contrast.

Other accessibility fixes:
- Escape closes the open dialog or sheet.
- Keyboard focus shows a solid ring on buttons, links and sliders.
- Toasts are announced to screen readers.
- The tab bar is navigation with aria-current instead of a tablist whose
  buttons were never tabs.
- Settings choice groups are named after their row.
- The driving-mode voice layer is only right-to-left in Hebrew.
@YossiYad
YossiYad merged commit ececdd7 into main Sep 23, 2026
1 check passed
@YossiYad
YossiYad deleted the feature/i18n-accessibility branch September 23, 2026 20:45
YossiYad added a commit that referenced this pull request Oct 13, 2026
…lity settings

Add a language picker, English default and accessibility settings
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