From 67ef7f29a52753b7c9e336da2c83c00aefa2e76b Mon Sep 17 00:00:00 2001 From: neon <18559658+neonsolstice@users.noreply.github.com> Date: Mon, 21 Sep 2026 04:35:57 +0000 Subject: [PATCH] fix(client): localize the read-aloud interface Replace the hardcoded English in the TTS and narration components with message keys, label every icon-only control, and add settings.common.nav.tts, which the settings sidebar rendered as a raw key. Stop requiring PODCAST_ENCRYPTION_KEY while APP_FEATURES.podcasts is off, and skip podcast routes and permissions in the authorization matrix for the same reason. Pass the direct-download settle() helper the SETTLE_MS budget the file already defines: vi.waitFor's one-second default cannot cover six DNS-resolved redirect hops on a cold CI resolver. --- README.md | 16 +-- .../components/MediaOverlayMiniPlayer.vue | 37 +++-- .../composables/useMediaOverlay.ts | 3 +- .../features/tts/TtsOpenAiVoiceCuration.vue | 90 ++++++++---- client/src/features/tts/TtsSettings.vue | 26 ++-- .../features/tts/components/TtsMiniPlayer.vue | 37 +++-- .../tts/components/TtsMiniPlayerExpanded.vue | 69 +++++++--- .../tts/components/TtsReaderControls.vue | 4 +- .../tts/components/TtsResumePrompt.vue | 21 +-- .../tts/components/TtsSleepTimerPicker.vue | 19 ++- .../tts/components/TtsSpeedControl.vue | 27 +++- .../tts/components/TtsVoicePicker.vue | 38 ++++-- .../features/tts/composables/useTtsPlayer.ts | 3 +- client/src/locales/en.json | 128 +++++++++++++++++- client/src/router/index.ts | 2 +- docker-compose.yml | 2 +- server/src/config/env.validation.test.ts | 25 ++-- server/src/config/env.validation.ts | 7 +- .../direct-download.service.test.ts | 21 ++- server/test/authorization-matrix.e2e-spec.ts | 80 +++++++---- .../route-inventory/manifest.json | 6 +- .../route-inventory/routes-08.json | 60 ++++++++ 22 files changed, 550 insertions(+), 171 deletions(-) diff --git a/README.md b/README.md index 8036dc552..aa4cc4caf 100644 --- a/README.md +++ b/README.md @@ -63,14 +63,6 @@ Take your library anywhere with the official native BookOrbit app. Read ebooks, -## How I Actually Use BookOrbit - -One read-along EPUB3 per book: listened to on iPhone, carried offline to Apple Watch for runs, read -on a Kobo through KOReader, and picked up again on the laptop. One file, one reading position, no -reconciling an audiobook against an ebook. - -Read the full walkthrough at **[bookorbit.app/my-workflow](https://bookorbit.app/my-workflow)**. - ## Live Demo Try the live instance before you install. No account required. @@ -136,6 +128,14 @@ Open `http://your-server-ip:3000` and complete setup using your `SETUP_BOOTSTRAP For the full installation guide including reverse proxy setup, file permissions on NAS, secrets from mounted files, external databases, OIDC hardening, and environment variable reference, see **[bookorbit.app/installation](https://bookorbit.app/installation)**. +## How I Actually Use BookOrbit + +One read-along EPUB3 per book: listened to on iPhone, carried offline to Apple Watch for runs, read +on a Kobo through KOReader, and picked up again on the laptop. One file, one reading position, no +reconciling an audiobook against an ebook. + +Read the full walkthrough at **[bookorbit.app/my-workflow](https://bookorbit.app/my-workflow)**. + ## KOReader Plugin The BookOrbit plugin for KOReader adds progress sync, two-way annotation sync, and a native catalog browser: navigate, search, and download books from your library without leaving the device. diff --git a/client/src/features/reader/media-overlay/components/MediaOverlayMiniPlayer.vue b/client/src/features/reader/media-overlay/components/MediaOverlayMiniPlayer.vue index 3a841c483..732f14173 100644 --- a/client/src/features/reader/media-overlay/components/MediaOverlayMiniPlayer.vue +++ b/client/src/features/reader/media-overlay/components/MediaOverlayMiniPlayer.vue @@ -1,11 +1,13 @@