diff --git a/packages/i18n/src/locales/en/settings.yaml b/packages/i18n/src/locales/en/settings.yaml index f854b3ab41..eb96a73d7c 100644 --- a/packages/i18n/src/locales/en/settings.yaml +++ b/packages/i18n/src/locales/en/settings.yaml @@ -671,6 +671,8 @@ pages: description: Configure 3D VRM models and settings scene: Scene modules: + availability: + none: None beat_sync: description: Vibe with beats from the audio source title: Beat Sync diff --git a/packages/i18n/src/locales/en/stage.yaml b/packages/i18n/src/locales/en/stage.yaml index 3c8ba64f8c..2158699e0d 100644 --- a/packages/i18n/src/locales/en/stage.yaml +++ b/packages/i18n/src/locales/en/stage.yaml @@ -21,6 +21,8 @@ mobile-tools: menu: Menu menu-unread: Menu, {count} unread notifications chat: + audio: + hearing-disabled: '[Audio recording: transcription is disabled.]' provider-configuration: title: Chat provider isn't configured description: Choose and validate a provider in Settings before sending a message. diff --git a/packages/i18n/src/locales/zh-Hans/settings.yaml b/packages/i18n/src/locales/zh-Hans/settings.yaml index a85165074e..56b53d81d3 100644 --- a/packages/i18n/src/locales/zh-Hans/settings.yaml +++ b/packages/i18n/src/locales/zh-Hans/settings.yaml @@ -632,6 +632,8 @@ pages: description: 配置 3D VRM 模型 scene: 场景 modules: + availability: + none: 无 beat_sync: description: 随音源节拍律动 title: 同步音律 diff --git a/packages/i18n/src/locales/zh-Hans/stage.yaml b/packages/i18n/src/locales/zh-Hans/stage.yaml index 1c87518c96..0153c680d3 100644 --- a/packages/i18n/src/locales/zh-Hans/stage.yaml +++ b/packages/i18n/src/locales/zh-Hans/stage.yaml @@ -21,6 +21,8 @@ mobile-tools: menu: 菜单 menu-unread: 菜单,{count} 条未读通知 chat: + audio: + hearing-disabled: '[语音录音:转写已停用。]' provider-configuration: title: 尚未正确配置聊天 Provider description: 请先前往设置页面选择并验证一个 Provider,再发送消息。 diff --git a/packages/stage-pages/src/pages/settings/modules/hearing/index.browser.test.ts b/packages/stage-pages/src/pages/settings/modules/hearing/index.browser.test.ts index 6ad750babc..3ec85af3d0 100644 --- a/packages/stage-pages/src/pages/settings/modules/hearing/index.browser.test.ts +++ b/packages/stage-pages/src/pages/settings/modules/hearing/index.browser.test.ts @@ -1,6 +1,7 @@ import en from '@proj-airi/i18n/locales/en' import { pushToTalkTriggerKey } from '@proj-airi/stage-ui/composables/push-to-talk-trigger' +import { useHearingStore } from '@proj-airi/stage-ui/stores/modules/hearing' import { createPinia, disposePinia } from 'pinia' import { afterEach, describe, expect, it, vi } from 'vitest' import { cleanup, render } from 'vitest-browser-vue' @@ -49,6 +50,24 @@ async function openInputModeSelect(screen: Awaited { + // https://github.com/moeru-ai/airi/issues/3153 + // ROOT CAUSE: + // The overview lacked a module switch. The switch now preserves the selected provider and model. + it('issue #3153: switches hearing off and on without clearing its selection', async () => { + localStorage.setItem('settings/hearing/active-provider', 'browser-web-speech-api') + localStorage.setItem('settings/hearing/active-model', 'web-speech-api') + const screen = await renderHearing(true) + const hearing = useHearingStore(pinias[pinias.length - 1]) + const toggle = screen.getByRole('switch', { name: 'Hearing', exact: true }) + await expect.element(toggle).toBeChecked() + await toggle.click() + expect(hearing.configured).toBe(false) + expect(hearing.activeTranscriptionProvider).toBe('browser-web-speech-api') + expect(hearing.activeTranscriptionModel).toBe('web-speech-api') + await toggle.click() + expect(hearing.configured).toBe(true) + }) + it('links to the speech recognition and wake words pages', async () => { const screen = await renderHearing(true) diff --git a/packages/stage-pages/src/pages/settings/modules/hearing/index.vue b/packages/stage-pages/src/pages/settings/modules/hearing/index.vue index 1526a596b6..58de957ca0 100644 --- a/packages/stage-pages/src/pages/settings/modules/hearing/index.vue +++ b/packages/stage-pages/src/pages/settings/modules/hearing/index.vue @@ -65,6 +65,12 @@ const pages = computed(() => [