From 43b8a890ec4ec8e57781142de494f06cd6e1af3f Mon Sep 17 00:00:00 2001
From: Alcahest
Date: Mon, 9 Mar 2026 20:51:43 +0100
Subject: [PATCH 1/4] feat: add dictation mode toggle in transcription settings
---
src/components/SettingsPage.tsx | 54 ++++++++++++++++++++++++++++++
src/helpers/audioManager.js | 1 +
src/hooks/useSettings.ts | 3 ++
src/locales/de/translation.json | 7 ++++
src/locales/en/translation.json | 7 ++++
src/locales/es/translation.json | 7 ++++
src/locales/fr/translation.json | 7 ++++
src/locales/it/translation.json | 7 ++++
src/locales/ja/translation.json | 7 ++++
src/locales/pt/translation.json | 7 ++++
src/locales/ru/translation.json | 7 ++++
src/locales/zh-CN/translation.json | 7 ++++
src/locales/zh-TW/translation.json | 7 ++++
src/stores/settingsStore.ts | 6 ++++
14 files changed, 134 insertions(+)
diff --git a/src/components/SettingsPage.tsx b/src/components/SettingsPage.tsx
index 83410a84..d4ed5d15 100644
--- a/src/components/SettingsPage.tsx
+++ b/src/components/SettingsPage.tsx
@@ -26,6 +26,7 @@ import {
RotateCw,
BookOpen,
Copy,
+ Zap,
} from "lucide-react";
import { useAuth } from "../hooks/useAuth";
import { NEON_AUTH_URL, signOut } from "../lib/neonAuth";
@@ -172,6 +173,8 @@ interface TranscriptionSectionProps {
setCustomTranscriptionApiKey: (key: string) => void;
cloudTranscriptionBaseUrl?: string;
setCloudTranscriptionBaseUrl: (url: string) => void;
+ dictationMode: "normal" | "fast";
+ setDictationMode: (mode: string) => void;
toast: (opts: {
title: string;
description: string;
@@ -207,6 +210,8 @@ function TranscriptionSection({
setCustomTranscriptionApiKey,
cloudTranscriptionBaseUrl,
setCloudTranscriptionBaseUrl,
+ dictationMode,
+ setDictationMode,
toast,
}: TranscriptionSectionProps) {
const { t } = useTranslation();
@@ -346,6 +351,51 @@ function TranscriptionSection({
)}
+ {/* Dictation mode selector — visible for all cloud modes, signed in or not */}
+ {!useLocalWhisper && (
+
+
+
+ {t("settingsPage.transcription.dictationMode.title")}
+
+
+
+
+
+
+
+ )}
+
{/* Custom Setup model picker — shown when Custom Setup is active or not signed in */}
{(isCustomMode || !isSignedIn) && (
);
diff --git a/src/helpers/audioManager.js b/src/helpers/audioManager.js
index 4d49b91f..e5fe35d2 100644
--- a/src/helpers/audioManager.js
+++ b/src/helpers/audioManager.js
@@ -2003,6 +2003,7 @@ registerProcessor("pcm-streaming-processor", PCMStreamingProcessor);
shouldUseStreaming(isSignedInOverride) {
const s = getSettings();
+ if (s.dictationMode === "normal") return false;
if (s.useLocalWhisper) return false;
if (REALTIME_MODELS.has(s.cloudTranscriptionModel)) {
diff --git a/src/hooks/useSettings.ts b/src/hooks/useSettings.ts
index 56d0c62f..a91070b0 100644
--- a/src/hooks/useSettings.ts
+++ b/src/hooks/useSettings.ts
@@ -20,6 +20,7 @@ export interface TranscriptionSettings {
cloudTranscriptionMode: string;
customDictionary: string[];
assemblyAiStreaming: boolean;
+ dictationMode: "normal" | "fast";
}
export interface ReasoningSettings {
@@ -179,6 +180,8 @@ function useSettingsInternal() {
customDictionary: store.customDictionary,
assemblyAiStreaming: store.assemblyAiStreaming,
setAssemblyAiStreaming: store.setAssemblyAiStreaming,
+ dictationMode: store.dictationMode,
+ setDictationMode: store.setDictationMode,
useReasoningModel: store.useReasoningModel,
reasoningModel: store.reasoningModel,
reasoningProvider: store.reasoningProvider,
diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json
index 455e9ae9..11e73435 100644
--- a/src/locales/de/translation.json
+++ b/src/locales/de/translation.json
@@ -1272,6 +1272,13 @@
"description": "Konfigurieren Sie Ihren eigenen Anbieter und API-Schlüssel.",
"title": "Zu benutzerdefinierter Einrichtung gewechselt"
}
+ },
+ "dictationMode": {
+ "title": "Diktiermodus",
+ "normal": "Normal",
+ "normalDescription": "Beste Genauigkeit. Braucht einen Moment zur Verarbeitung nach der Aufnahme.",
+ "fast": "Schnell",
+ "fastDescription": "Schnellere Ergebnisse, aber möglicherweise weniger genau."
}
}
},
diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json
index 479e258f..fc8f8a5b 100644
--- a/src/locales/en/translation.json
+++ b/src/locales/en/translation.json
@@ -1348,6 +1348,13 @@
"description": "Configure your own provider and API key.",
"title": "Switched to Custom Setup"
}
+ },
+ "dictationMode": {
+ "title": "Dictation Mode",
+ "normal": "Normal",
+ "normalDescription": "Best accuracy. Takes a moment to process after recording.",
+ "fast": "Fast",
+ "fastDescription": "Faster results, but may be less accurate."
}
}
},
diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json
index 27ac8658..60863a84 100644
--- a/src/locales/es/translation.json
+++ b/src/locales/es/translation.json
@@ -1276,6 +1276,13 @@
"description": "Configura tu propio proveedor y clave API.",
"title": "Cambiado a configuración personalizada"
}
+ },
+ "dictationMode": {
+ "title": "Modo de dictado",
+ "normal": "Normal",
+ "normalDescription": "Máxima precisión. Tarda un momento en procesar tras la grabación.",
+ "fast": "Rápido",
+ "fastDescription": "Resultados más rápidos, pero puede ser menos preciso."
}
}
},
diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json
index 5af8a2c5..4f51e3da 100644
--- a/src/locales/fr/translation.json
+++ b/src/locales/fr/translation.json
@@ -1276,6 +1276,13 @@
"description": "Configurez votre propre fournisseur et clé API.",
"title": "Basculé vers la configuration personnalisée"
}
+ },
+ "dictationMode": {
+ "title": "Mode de dictée",
+ "normal": "Normal",
+ "normalDescription": "Meilleure précision. Prend un moment pour traiter après l'enregistrement.",
+ "fast": "Rapide",
+ "fastDescription": "Résultats plus rapides, mais peut être moins précis."
}
}
},
diff --git a/src/locales/it/translation.json b/src/locales/it/translation.json
index f296b3ca..32e24872 100644
--- a/src/locales/it/translation.json
+++ b/src/locales/it/translation.json
@@ -1276,6 +1276,13 @@
"description": "Configura il tuo provider e la tua chiave API.",
"title": "Passato a configurazione personalizzata"
}
+ },
+ "dictationMode": {
+ "title": "Modalità dettatura",
+ "normal": "Normale",
+ "normalDescription": "Massima accuratezza. Richiede un momento per elaborare dopo la registrazione.",
+ "fast": "Veloce",
+ "fastDescription": "Risultati più rapidi, ma potrebbe essere meno accurata."
}
}
},
diff --git a/src/locales/ja/translation.json b/src/locales/ja/translation.json
index f95c5ea8..f815153b 100644
--- a/src/locales/ja/translation.json
+++ b/src/locales/ja/translation.json
@@ -1272,6 +1272,13 @@
"description": "独自のプロバイダーと API キーを設定してください。",
"title": "カスタム設定に切り替えました"
}
+ },
+ "dictationMode": {
+ "title": "ディクテーションモード",
+ "normal": "通常",
+ "normalDescription": "最高の精度。録音後に処理するため少し時間がかかります。",
+ "fast": "高速",
+ "fastDescription": "より速い結果が得られますが、精度が低い場合があります。"
}
}
},
diff --git a/src/locales/pt/translation.json b/src/locales/pt/translation.json
index 208cde04..cc2954f9 100644
--- a/src/locales/pt/translation.json
+++ b/src/locales/pt/translation.json
@@ -1248,6 +1248,13 @@
"description": "Configure seu próprio provedor e chave API.",
"title": "Mudou para configuração personalizada"
}
+ },
+ "dictationMode": {
+ "title": "Modo de ditado",
+ "normal": "Normal",
+ "normalDescription": "Melhor precisão. Leva um momento para processar após a gravação.",
+ "fast": "Rápido",
+ "fastDescription": "Resultados mais rápidos, mas pode ser menos preciso."
}
}
},
diff --git a/src/locales/ru/translation.json b/src/locales/ru/translation.json
index d449103a..caf4f9a3 100644
--- a/src/locales/ru/translation.json
+++ b/src/locales/ru/translation.json
@@ -1276,6 +1276,13 @@
"description": "Настройте собственного провайдера и API-ключ.",
"title": "Переключено на пользовательскую настройку"
}
+ },
+ "dictationMode": {
+ "title": "Режим диктовки",
+ "normal": "Обычный",
+ "normalDescription": "Лучшая точность. Требуется момент на обработку после записи.",
+ "fast": "Быстрый",
+ "fastDescription": "Результаты быстрее, но может быть менее точным."
}
}
},
diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json
index 314ebb29..4992e673 100644
--- a/src/locales/zh-CN/translation.json
+++ b/src/locales/zh-CN/translation.json
@@ -1272,6 +1272,13 @@
"description": "请配置你的服务商和 API Key。",
"title": "已切换到自定义设置"
}
+ },
+ "dictationMode": {
+ "title": "听写模式",
+ "normal": "普通",
+ "normalDescription": "最佳准确度。录音后需要片刻处理。",
+ "fast": "快速",
+ "fastDescription": "结果更快,但可能准确度较低。"
}
}
},
diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json
index c969a5aa..01e8a8f9 100644
--- a/src/locales/zh-TW/translation.json
+++ b/src/locales/zh-TW/translation.json
@@ -1272,6 +1272,13 @@
"description": "設定你自己的供應商和 API Key。",
"title": "已切換至自訂設定"
}
+ },
+ "dictationMode": {
+ "title": "聽寫模式",
+ "normal": "一般",
+ "normalDescription": "最佳準確度。錄音後需要片刻處理。",
+ "fast": "快速",
+ "fastDescription": "結果更快,但可能準確度較低。"
}
}
},
diff --git a/src/stores/settingsStore.ts b/src/stores/settingsStore.ts
index bfb84313..87a34418 100644
--- a/src/stores/settingsStore.ts
+++ b/src/stores/settingsStore.ts
@@ -121,6 +121,7 @@ export interface SettingsState
setCloudReasoningBaseUrl: (value: string) => void;
setCustomDictionary: (words: string[]) => void;
setAssemblyAiStreaming: (value: boolean) => void;
+ setDictationMode: (value: string) => void;
setUseReasoningModel: (value: boolean) => void;
setReasoningModel: (value: string) => void;
setReasoningProvider: (value: string) => void;
@@ -242,6 +243,9 @@ export const useSettingsStore = create()((set, get) => ({
cloudReasoningBaseUrl: readString("cloudReasoningBaseUrl", API_ENDPOINTS.OPENAI_BASE),
customDictionary: readStringArray("customDictionary", []),
assemblyAiStreaming: readBoolean("assemblyAiStreaming", true),
+ dictationMode: (readString("dictationMode", "normal") === "fast" ? "fast" : "normal") as
+ | "normal"
+ | "fast",
useReasoningModel: readBoolean("useReasoningModel", true),
reasoningModel: readString("reasoningModel", ""),
@@ -330,6 +334,7 @@ export const useSettingsStore = create()((set, get) => ({
setCloudReasoningMode: createStringSetter("cloudReasoningMode"),
setCloudReasoningBaseUrl: createStringSetter("cloudReasoningBaseUrl"),
setAssemblyAiStreaming: createBooleanSetter("assemblyAiStreaming"),
+ setDictationMode: createStringSetter("dictationMode"),
setUseReasoningModel: createBooleanSetter("useReasoningModel"),
setReasoningModel: createStringSetter("reasoningModel"),
setReasoningProvider: createStringSetter("reasoningProvider"),
@@ -524,6 +529,7 @@ export const useSettingsStore = create()((set, get) => ({
if (settings.customDictionary !== undefined) s.setCustomDictionary(settings.customDictionary);
if (settings.assemblyAiStreaming !== undefined)
s.setAssemblyAiStreaming(settings.assemblyAiStreaming);
+ if (settings.dictationMode !== undefined) s.setDictationMode(settings.dictationMode);
},
updateReasoningSettings: (settings: Partial) => {
From 807247c1bf5203eed7e7d96991bfe439027f56bd Mon Sep 17 00:00:00 2001
From: Alcahest
Date: Mon, 9 Mar 2026 21:21:57 +0100
Subject: [PATCH 2/4] update dictation mode descriptions to be more technical
---
src/locales/de/translation.json | 4 ++--
src/locales/en/translation.json | 4 ++--
src/locales/es/translation.json | 4 ++--
src/locales/fr/translation.json | 4 ++--
src/locales/it/translation.json | 4 ++--
src/locales/ja/translation.json | 4 ++--
src/locales/pt/translation.json | 4 ++--
src/locales/ru/translation.json | 4 ++--
src/locales/zh-CN/translation.json | 4 ++--
src/locales/zh-TW/translation.json | 4 ++--
10 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json
index 11e73435..9593a091 100644
--- a/src/locales/de/translation.json
+++ b/src/locales/de/translation.json
@@ -1276,9 +1276,9 @@
"dictationMode": {
"title": "Diktiermodus",
"normal": "Normal",
- "normalDescription": "Beste Genauigkeit. Braucht einen Moment zur Verarbeitung nach der Aufnahme.",
+ "normalDescription": "File-basierte Transkription. Verarbeitet Audio nach der Aufnahme.",
"fast": "Schnell",
- "fastDescription": "Schnellere Ergebnisse, aber möglicherweise weniger genau."
+ "fastDescription": "WebSocket-Streaming über OpenAI Realtime API. Live-Transkription während Sie sprechen."
}
}
},
diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json
index fc8f8a5b..d30f9a84 100644
--- a/src/locales/en/translation.json
+++ b/src/locales/en/translation.json
@@ -1352,9 +1352,9 @@
"dictationMode": {
"title": "Dictation Mode",
"normal": "Normal",
- "normalDescription": "Best accuracy. Takes a moment to process after recording.",
+ "normalDescription": "File-based transcription. Processes audio after recording.",
"fast": "Fast",
- "fastDescription": "Faster results, but may be less accurate."
+ "fastDescription": "WebSocket streaming via OpenAI Realtime API. Live transcription as you speak."
}
}
},
diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json
index 60863a84..6972301f 100644
--- a/src/locales/es/translation.json
+++ b/src/locales/es/translation.json
@@ -1280,9 +1280,9 @@
"dictationMode": {
"title": "Modo de dictado",
"normal": "Normal",
- "normalDescription": "Máxima precisión. Tarda un momento en procesar tras la grabación.",
+ "normalDescription": "Transcripción file-based. Procesa el audio después de grabar.",
"fast": "Rápido",
- "fastDescription": "Resultados más rápidos, pero puede ser menos preciso."
+ "fastDescription": "Streaming WebSocket a través de OpenAI Realtime API. Transcripción en tiempo real."
}
}
},
diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json
index 4f51e3da..e304187e 100644
--- a/src/locales/fr/translation.json
+++ b/src/locales/fr/translation.json
@@ -1280,9 +1280,9 @@
"dictationMode": {
"title": "Mode de dictée",
"normal": "Normal",
- "normalDescription": "Meilleure précision. Prend un moment pour traiter après l'enregistrement.",
+ "normalDescription": "Transcription file-based. Traite l'audio après l'enregistrement.",
"fast": "Rapide",
- "fastDescription": "Résultats plus rapides, mais peut être moins précis."
+ "fastDescription": "Streaming WebSocket via OpenAI Realtime API. Transcription en temps réel."
}
}
},
diff --git a/src/locales/it/translation.json b/src/locales/it/translation.json
index 32e24872..7020d0d4 100644
--- a/src/locales/it/translation.json
+++ b/src/locales/it/translation.json
@@ -1280,9 +1280,9 @@
"dictationMode": {
"title": "Modalità dettatura",
"normal": "Normale",
- "normalDescription": "Massima accuratezza. Richiede un momento per elaborare dopo la registrazione.",
+ "normalDescription": "Trascrizione file-based. Elabora l'audio dopo la registrazione.",
"fast": "Veloce",
- "fastDescription": "Risultati più rapidi, ma potrebbe essere meno accurata."
+ "fastDescription": "Streaming WebSocket tramite OpenAI Realtime API. Trascrizione in tempo reale."
}
}
},
diff --git a/src/locales/ja/translation.json b/src/locales/ja/translation.json
index f815153b..93cffa91 100644
--- a/src/locales/ja/translation.json
+++ b/src/locales/ja/translation.json
@@ -1276,9 +1276,9 @@
"dictationMode": {
"title": "ディクテーションモード",
"normal": "通常",
- "normalDescription": "最高の精度。録音後に処理するため少し時間がかかります。",
+ "normalDescription": "ファイルベースの文字起こし。録音後にオーディオを処理します。",
"fast": "高速",
- "fastDescription": "より速い結果が得られますが、精度が低い場合があります。"
+ "fastDescription": "OpenAI Realtime API経由のWebSocketストリーミング。リアルタイム文字起こし。"
}
}
},
diff --git a/src/locales/pt/translation.json b/src/locales/pt/translation.json
index cc2954f9..ec8980ed 100644
--- a/src/locales/pt/translation.json
+++ b/src/locales/pt/translation.json
@@ -1252,9 +1252,9 @@
"dictationMode": {
"title": "Modo de ditado",
"normal": "Normal",
- "normalDescription": "Melhor precisão. Leva um momento para processar após a gravação.",
+ "normalDescription": "Transcrição file-based. Processa o áudio após a gravação.",
"fast": "Rápido",
- "fastDescription": "Resultados mais rápidos, mas pode ser menos preciso."
+ "fastDescription": "Streaming WebSocket via OpenAI Realtime API. Transcrição em tempo real."
}
}
},
diff --git a/src/locales/ru/translation.json b/src/locales/ru/translation.json
index caf4f9a3..80e33e94 100644
--- a/src/locales/ru/translation.json
+++ b/src/locales/ru/translation.json
@@ -1280,9 +1280,9 @@
"dictationMode": {
"title": "Режим диктовки",
"normal": "Обычный",
- "normalDescription": "Лучшая точность. Требуется момент на обработку после записи.",
+ "normalDescription": "File-based транскрипция. Обрабатывает аудио после записи.",
"fast": "Быстрый",
- "fastDescription": "Результаты быстрее, но может быть менее точным."
+ "fastDescription": "WebSocket-стриминг через OpenAI Realtime API. Транскрипция в реальном времени."
}
}
},
diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json
index 4992e673..92c03a7c 100644
--- a/src/locales/zh-CN/translation.json
+++ b/src/locales/zh-CN/translation.json
@@ -1276,9 +1276,9 @@
"dictationMode": {
"title": "听写模式",
"normal": "普通",
- "normalDescription": "最佳准确度。录音后需要片刻处理。",
+ "normalDescription": "基于文件的转录。录音后处理音频。",
"fast": "快速",
- "fastDescription": "结果更快,但可能准确度较低。"
+ "fastDescription": "通过 OpenAI Realtime API 进行 WebSocket 流式传输。实时转录。"
}
}
},
diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json
index 01e8a8f9..430ff878 100644
--- a/src/locales/zh-TW/translation.json
+++ b/src/locales/zh-TW/translation.json
@@ -1276,9 +1276,9 @@
"dictationMode": {
"title": "聽寫模式",
"normal": "一般",
- "normalDescription": "最佳準確度。錄音後需要片刻處理。",
+ "normalDescription": "基於檔案的轉錄。錄音後處理音訊。",
"fast": "快速",
- "fastDescription": "結果更快,但可能準確度較低。"
+ "fastDescription": "透過 OpenAI Realtime API 進行 WebSocket 串流。即時轉錄。"
}
}
},
From 66f6d9cac0cc9eb24f04f5cdc3c3623566fd5714 Mon Sep 17 00:00:00 2001
From: Alcahest
Date: Mon, 9 Mar 2026 23:00:29 +0100
Subject: [PATCH 3/4] update normal dictation mode description
---
src/locales/de/translation.json | 2 +-
src/locales/en/translation.json | 2 +-
src/locales/es/translation.json | 2 +-
src/locales/fr/translation.json | 2 +-
src/locales/it/translation.json | 2 +-
src/locales/ja/translation.json | 2 +-
src/locales/pt/translation.json | 2 +-
src/locales/ru/translation.json | 2 +-
src/locales/zh-CN/translation.json | 2 +-
src/locales/zh-TW/translation.json | 2 +-
10 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json
index 9593a091..18c7f296 100644
--- a/src/locales/de/translation.json
+++ b/src/locales/de/translation.json
@@ -1276,7 +1276,7 @@
"dictationMode": {
"title": "Diktiermodus",
"normal": "Normal",
- "normalDescription": "File-basierte Transkription. Verarbeitet Audio nach der Aufnahme.",
+ "normalDescription": "Beste Genauigkeit, braucht aber einen Moment zur Verarbeitung nach der Aufnahme.",
"fast": "Schnell",
"fastDescription": "WebSocket-Streaming über OpenAI Realtime API. Live-Transkription während Sie sprechen."
}
diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json
index d30f9a84..275512ee 100644
--- a/src/locales/en/translation.json
+++ b/src/locales/en/translation.json
@@ -1352,7 +1352,7 @@
"dictationMode": {
"title": "Dictation Mode",
"normal": "Normal",
- "normalDescription": "File-based transcription. Processes audio after recording.",
+ "normalDescription": "Best accuracy, but takes a moment to process after recording.",
"fast": "Fast",
"fastDescription": "WebSocket streaming via OpenAI Realtime API. Live transcription as you speak."
}
diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json
index 6972301f..063ea879 100644
--- a/src/locales/es/translation.json
+++ b/src/locales/es/translation.json
@@ -1280,7 +1280,7 @@
"dictationMode": {
"title": "Modo de dictado",
"normal": "Normal",
- "normalDescription": "Transcripción file-based. Procesa el audio después de grabar.",
+ "normalDescription": "Máxima precisión, pero tarda un momento en procesar tras la grabación.",
"fast": "Rápido",
"fastDescription": "Streaming WebSocket a través de OpenAI Realtime API. Transcripción en tiempo real."
}
diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json
index e304187e..20eb3291 100644
--- a/src/locales/fr/translation.json
+++ b/src/locales/fr/translation.json
@@ -1280,7 +1280,7 @@
"dictationMode": {
"title": "Mode de dictée",
"normal": "Normal",
- "normalDescription": "Transcription file-based. Traite l'audio après l'enregistrement.",
+ "normalDescription": "Meilleure précision, mais prend un moment pour traiter après l'enregistrement.",
"fast": "Rapide",
"fastDescription": "Streaming WebSocket via OpenAI Realtime API. Transcription en temps réel."
}
diff --git a/src/locales/it/translation.json b/src/locales/it/translation.json
index 7020d0d4..f264630d 100644
--- a/src/locales/it/translation.json
+++ b/src/locales/it/translation.json
@@ -1280,7 +1280,7 @@
"dictationMode": {
"title": "Modalità dettatura",
"normal": "Normale",
- "normalDescription": "Trascrizione file-based. Elabora l'audio dopo la registrazione.",
+ "normalDescription": "Massima accuratezza, ma richiede un momento per elaborare dopo la registrazione.",
"fast": "Veloce",
"fastDescription": "Streaming WebSocket tramite OpenAI Realtime API. Trascrizione in tempo reale."
}
diff --git a/src/locales/ja/translation.json b/src/locales/ja/translation.json
index 93cffa91..9deab9f8 100644
--- a/src/locales/ja/translation.json
+++ b/src/locales/ja/translation.json
@@ -1276,7 +1276,7 @@
"dictationMode": {
"title": "ディクテーションモード",
"normal": "通常",
- "normalDescription": "ファイルベースの文字起こし。録音後にオーディオを処理します。",
+ "normalDescription": "最高の精度ですが、録音後に処理に少し時間がかかります。",
"fast": "高速",
"fastDescription": "OpenAI Realtime API経由のWebSocketストリーミング。リアルタイム文字起こし。"
}
diff --git a/src/locales/pt/translation.json b/src/locales/pt/translation.json
index ec8980ed..41748c5c 100644
--- a/src/locales/pt/translation.json
+++ b/src/locales/pt/translation.json
@@ -1252,7 +1252,7 @@
"dictationMode": {
"title": "Modo de ditado",
"normal": "Normal",
- "normalDescription": "Transcrição file-based. Processa o áudio após a gravação.",
+ "normalDescription": "Melhor precisão, mas leva um momento para processar após a gravação.",
"fast": "Rápido",
"fastDescription": "Streaming WebSocket via OpenAI Realtime API. Transcrição em tempo real."
}
diff --git a/src/locales/ru/translation.json b/src/locales/ru/translation.json
index 80e33e94..de7cbf1c 100644
--- a/src/locales/ru/translation.json
+++ b/src/locales/ru/translation.json
@@ -1280,7 +1280,7 @@
"dictationMode": {
"title": "Режим диктовки",
"normal": "Обычный",
- "normalDescription": "File-based транскрипция. Обрабатывает аудио после записи.",
+ "normalDescription": "Лучшая точность, но требуется момент на обработку после записи.",
"fast": "Быстрый",
"fastDescription": "WebSocket-стриминг через OpenAI Realtime API. Транскрипция в реальном времени."
}
diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json
index 92c03a7c..77c4dab0 100644
--- a/src/locales/zh-CN/translation.json
+++ b/src/locales/zh-CN/translation.json
@@ -1276,7 +1276,7 @@
"dictationMode": {
"title": "听写模式",
"normal": "普通",
- "normalDescription": "基于文件的转录。录音后处理音频。",
+ "normalDescription": "最佳准确度,但录音后需要片刻处理。",
"fast": "快速",
"fastDescription": "通过 OpenAI Realtime API 进行 WebSocket 流式传输。实时转录。"
}
diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json
index 430ff878..9b1462e0 100644
--- a/src/locales/zh-TW/translation.json
+++ b/src/locales/zh-TW/translation.json
@@ -1276,7 +1276,7 @@
"dictationMode": {
"title": "聽寫模式",
"normal": "一般",
- "normalDescription": "基於檔案的轉錄。錄音後處理音訊。",
+ "normalDescription": "最佳準確度,但錄音後需要片刻處理。",
"fast": "快速",
"fastDescription": "透過 OpenAI Realtime API 進行 WebSocket 串流。即時轉錄。"
}
From eb0d2979edea38c5f99c460ddefc248e7b850de7 Mon Sep 17 00:00:00 2001
From: Alcahest
Date: Thu, 12 Mar 2026 03:04:23 +0100
Subject: [PATCH 4/4] add dictation mode logging
---
src/components/SettingsPage.tsx | 10 ++++++++--
src/helpers/audioManager.js | 7 +++++++
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/components/SettingsPage.tsx b/src/components/SettingsPage.tsx
index d4ed5d15..6f13b104 100644
--- a/src/components/SettingsPage.tsx
+++ b/src/components/SettingsPage.tsx
@@ -360,7 +360,10 @@ function TranscriptionSection({