feat(caption): let live captions use their own speech model
The speech engine now keeps an auxiliary model next to the dictation model and transcribes with whichever the request names, reloading it once if the engine restarted. Settings > STT gains a live-caption model so captions can run on large-v3-turbo while dictation keeps its own model. The runtime minimum rises to 1.7.0 because older engines would silently ignore the model choice. Suggestion paging moves to Up/Down: the page follows the selection and the last item waits while more candidates are being generated. The Left/Right page shortcuts are removed; they did nothing until a page had filled and clash with Intel's display-rotation hotkeys.
This commit is contained in:
parent
39b8e7448e
commit
4b0f685941
29 changed files with 222 additions and 234 deletions
|
|
@ -1235,8 +1235,6 @@ export const SUGGESTION_DEFAULTS = {
|
|||
* 한 번에 요청하면 느리다(사용자 요청) — 1개씩 순차 요청해 채운다.
|
||||
*/
|
||||
maxCandidatesTotal: 12,
|
||||
/** 오버레이 한 페이지에 보여줄 후보 수. */
|
||||
pageSize: 3,
|
||||
maxOutputTokens: 64,
|
||||
/** 표시된 제안의 연속 접두가 이만큼 자랐을 때만 재생성한다. */
|
||||
regenerateAfterChars: 12,
|
||||
|
|
|
|||
|
|
@ -681,8 +681,6 @@ export type KeyBindingActionId =
|
|||
| 'suggestion-next'
|
||||
| 'suggestion-prev'
|
||||
| 'suggestion-dismiss'
|
||||
| 'suggestion-page-next'
|
||||
| 'suggestion-page-prev'
|
||||
|
||||
/** 액션 그룹 (설정 화면 섹션) */
|
||||
export type KeyBindingActionGroup = 'voice' | 'window' | 'input'
|
||||
|
|
@ -786,8 +784,8 @@ export const KEYBINDING_ACTIONS: readonly KeyBindingActionSpec[] = Object.freeze
|
|||
descriptionKey: 'keybinding.action.suggestionAccept.desc',
|
||||
holdMode: false,
|
||||
doublePress: false,
|
||||
// Ctrl+Alt+화살표 계열: 아래/위로 후보 순환, 좌우로 페이지 이동(12개까지
|
||||
// 순차 생성 — 사용자 요청). 화살표를 페이지 이동에 내주기 위해 수락은 Enter로 옮겼다.
|
||||
// Ctrl+Alt+↑/↓ 로 후보를 오가고(페이지는 따라 넘어간다), 수락은 Enter.
|
||||
// 좌우 화살표는 쓰지 않는다 — Intel 그래픽 드라이버의 화면 회전 단축키와 겹친다.
|
||||
defaultBindings: [kb(VK.Enter, { ctrl: true, alt: true })]
|
||||
},
|
||||
{
|
||||
|
|
@ -808,24 +806,6 @@ export const KEYBINDING_ACTIONS: readonly KeyBindingActionSpec[] = Object.freeze
|
|||
doublePress: false,
|
||||
defaultBindings: [kb(VK.ArrowUp, { ctrl: true, alt: true })]
|
||||
},
|
||||
{
|
||||
id: 'suggestion-page-next',
|
||||
group: 'input',
|
||||
labelKey: 'keybinding.action.suggestionPageNext',
|
||||
descriptionKey: 'keybinding.action.suggestionPageNext.desc',
|
||||
holdMode: false,
|
||||
doublePress: false,
|
||||
defaultBindings: [kb(VK.ArrowRight, { ctrl: true, alt: true })]
|
||||
},
|
||||
{
|
||||
id: 'suggestion-page-prev',
|
||||
group: 'input',
|
||||
labelKey: 'keybinding.action.suggestionPagePrev',
|
||||
descriptionKey: 'keybinding.action.suggestionPagePrev.desc',
|
||||
holdMode: false,
|
||||
doublePress: false,
|
||||
defaultBindings: [kb(VK.ArrowLeft, { ctrl: true, alt: true })]
|
||||
},
|
||||
{
|
||||
id: 'suggestion-dismiss',
|
||||
group: 'input',
|
||||
|
|
|
|||
|
|
@ -499,6 +499,8 @@ export interface AppConfig {
|
|||
captionOverlayPosition: { x: number; y: number } | null
|
||||
/** 확정된 자막 줄을 로컬 LLM으로 문맥에 맞게 다듬는다 */
|
||||
captionRefineEnabled: boolean
|
||||
/** 실시간 자막 전용 로컬 Whisper 모델. null 이면 받아쓰기 모델(sttModelId)을 쓴다 */
|
||||
captionSttModelId: string | null
|
||||
/** Auto-update 채널 (latest=stable / beta / alpha). UpdateService */
|
||||
updateChannel: 'latest' | 'beta' | 'alpha'
|
||||
/** staged rollout용 영구 기기 식별자 (개인정보 아님, 최초 실행 시 생성) */
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "Weiter",
|
||||
"popup.suggestion.hintDismiss": "Schließen",
|
||||
"popup.suggestion.hintMove": "Bewegen",
|
||||
"popup.suggestion.hintPage": "Seite",
|
||||
"popup.suggestion.loading": "Wird erzeugt…",
|
||||
"keybinding.ui.sectionInput": "Eingabevorschläge",
|
||||
"keybinding.action.suggestionAccept": "Vorschlag übernehmen",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "Mehr wird erzeugt… (bis zu {{max}})",
|
||||
"keybinding.action.suggestionPrev": "Vorheriger Vorschlag",
|
||||
"keybinding.action.suggestionPrev.desc": "Zum vorherigen Kandidaten wechseln.",
|
||||
"keybinding.action.suggestionPageNext": "Nächste Seite",
|
||||
"keybinding.action.suggestionPageNext.desc": "Zeigt die nächste Seite der Vorschläge (bis zu 12 insgesamt).",
|
||||
"keybinding.action.suggestionPagePrev": "Vorherige Seite",
|
||||
"keybinding.action.suggestionPagePrev.desc": "Zeigt die vorherige Seite der Vorschläge.",
|
||||
"input.insights.tabs.graph": "Graph",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "Satz-Knoten",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "Hört zu… der erste Untertitel kann einige Sekunden dauern",
|
||||
"popup.caption.dragHint": "Ziehen zum Verschieben · Doppelklick setzt zurück",
|
||||
"settings.captionRefine": "Untertitel im Kontext glätten",
|
||||
"settings.captionRefine.desc": "Die lokale KI korrigiert Leerzeichen, Satzzeichen und falsch verstandene Wörter anhand der umgebenden Zeilen."
|
||||
"settings.captionRefine.desc": "Die lokale KI korrigiert Leerzeichen, Satzzeichen und falsch verstandene Wörter anhand der umgebenden Zeilen.",
|
||||
"settings.captionModel": "Modell für Live-Untertitel",
|
||||
"settings.captionModel.same": "Wie beim Diktieren",
|
||||
"settings.captionModel.desc": "Live-Untertitel werden mit einem eigenen Modell erkannt, das zusätzlich zum Diktiermodell geladen wird."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1757,7 +1757,6 @@
|
|||
"popup.suggestion.hintNext": "Next",
|
||||
"popup.suggestion.hintDismiss": "Dismiss",
|
||||
"popup.suggestion.hintMove": "Move",
|
||||
"popup.suggestion.hintPage": "Page",
|
||||
"popup.suggestion.loading": "Generating…",
|
||||
"keybinding.ui.sectionInput": "Input suggestions",
|
||||
"keybinding.action.suggestionAccept": "Accept suggestion",
|
||||
|
|
@ -1836,10 +1835,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "More coming… (up to {{max}})",
|
||||
"keybinding.action.suggestionPrev": "Previous suggestion",
|
||||
"keybinding.action.suggestionPrev.desc": "Move to the previous suggestion candidate.",
|
||||
"keybinding.action.suggestionPageNext": "Next page",
|
||||
"keybinding.action.suggestionPageNext.desc": "Show the next page of suggestions (up to 12 total).",
|
||||
"keybinding.action.suggestionPagePrev": "Previous page",
|
||||
"keybinding.action.suggestionPagePrev.desc": "Show the previous page of suggestions.",
|
||||
"input.insights.tabs.graph": "Graph",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "Sentence nodes",
|
||||
|
|
@ -1905,5 +1900,8 @@
|
|||
"popup.caption.waiting": "Listening… the first caption can take a few seconds",
|
||||
"popup.caption.dragHint": "Drag to move · double-click to reset",
|
||||
"settings.captionRefine": "Polish captions with context",
|
||||
"settings.captionRefine.desc": "The local AI fixes spacing, punctuation and misheard words in finished captions using the surrounding lines."
|
||||
"settings.captionRefine.desc": "The local AI fixes spacing, punctuation and misheard words in finished captions using the surrounding lines.",
|
||||
"settings.captionModel": "Live caption model",
|
||||
"settings.captionModel.same": "Same as dictation",
|
||||
"settings.captionModel.desc": "Recognises live captions with a separate model, loaded alongside the dictation model."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "Siguiente",
|
||||
"popup.suggestion.hintDismiss": "Descartar",
|
||||
"popup.suggestion.hintMove": "Mover",
|
||||
"popup.suggestion.hintPage": "Página",
|
||||
"popup.suggestion.loading": "Generando…",
|
||||
"keybinding.ui.sectionInput": "Sugerencias de entrada",
|
||||
"keybinding.action.suggestionAccept": "Aceptar sugerencia",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "Generando más… (hasta {{max}})",
|
||||
"keybinding.action.suggestionPrev": "Sugerencia anterior",
|
||||
"keybinding.action.suggestionPrev.desc": "Pasa al candidato anterior.",
|
||||
"keybinding.action.suggestionPageNext": "Página siguiente",
|
||||
"keybinding.action.suggestionPageNext.desc": "Muestra la siguiente página de sugerencias (hasta 12 en total).",
|
||||
"keybinding.action.suggestionPagePrev": "Página anterior",
|
||||
"keybinding.action.suggestionPagePrev.desc": "Muestra la página anterior de sugerencias.",
|
||||
"input.insights.tabs.graph": "Grafo",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "Nodos de frase",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "Escuchando… el primer subtítulo puede tardar unos segundos",
|
||||
"popup.caption.dragHint": "Arrastra para mover · doble clic para restablecer",
|
||||
"settings.captionRefine": "Pulir subtítulos con contexto",
|
||||
"settings.captionRefine.desc": "La IA local corrige espacios, puntuación y palabras mal oídas usando las líneas cercanas."
|
||||
"settings.captionRefine.desc": "La IA local corrige espacios, puntuación y palabras mal oídas usando las líneas cercanas.",
|
||||
"settings.captionModel": "Modelo de subtítulos en vivo",
|
||||
"settings.captionModel.same": "Igual que el dictado",
|
||||
"settings.captionModel.desc": "Reconoce los subtítulos en vivo con un modelo aparte, cargado junto al de dictado."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "Suivant",
|
||||
"popup.suggestion.hintDismiss": "Fermer",
|
||||
"popup.suggestion.hintMove": "Déplacer",
|
||||
"popup.suggestion.hintPage": "Page",
|
||||
"popup.suggestion.loading": "Génération…",
|
||||
"keybinding.ui.sectionInput": "Suggestions de saisie",
|
||||
"keybinding.action.suggestionAccept": "Accepter la suggestion",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "Génération en cours… (jusqu'à {{max}})",
|
||||
"keybinding.action.suggestionPrev": "Suggestion précédente",
|
||||
"keybinding.action.suggestionPrev.desc": "Passe au candidat précédent.",
|
||||
"keybinding.action.suggestionPageNext": "Page suivante",
|
||||
"keybinding.action.suggestionPageNext.desc": "Affiche la page suivante de suggestions (jusqu'à 12 au total).",
|
||||
"keybinding.action.suggestionPagePrev": "Page précédente",
|
||||
"keybinding.action.suggestionPagePrev.desc": "Affiche la page précédente de suggestions.",
|
||||
"input.insights.tabs.graph": "Graphe",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "Nœuds de phrase",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "Écoute… le premier sous-titre peut prendre quelques secondes",
|
||||
"popup.caption.dragHint": "Glisser pour déplacer · double-clic pour réinitialiser",
|
||||
"settings.captionRefine": "Affiner les sous-titres selon le contexte",
|
||||
"settings.captionRefine.desc": "L’IA locale corrige les espaces, la ponctuation et les mots mal entendus d’après les lignes voisines."
|
||||
"settings.captionRefine.desc": "L’IA locale corrige les espaces, la ponctuation et les mots mal entendus d’après les lignes voisines.",
|
||||
"settings.captionModel": "Modèle des sous-titres en direct",
|
||||
"settings.captionModel.same": "Identique à la dictée",
|
||||
"settings.captionModel.desc": "Les sous-titres en direct utilisent un modèle distinct, chargé en plus de celui de la dictée."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "次へ",
|
||||
"popup.suggestion.hintDismiss": "閉じる",
|
||||
"popup.suggestion.hintMove": "移動",
|
||||
"popup.suggestion.hintPage": "ページ",
|
||||
"popup.suggestion.loading": "生成中…",
|
||||
"keybinding.ui.sectionInput": "入力サジェスト",
|
||||
"keybinding.action.suggestionAccept": "サジェストを承認",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "さらに生成中…(最大{{max}}件)",
|
||||
"keybinding.action.suggestionPrev": "前の候補",
|
||||
"keybinding.action.suggestionPrev.desc": "前の候補に移動します。",
|
||||
"keybinding.action.suggestionPageNext": "次のページ",
|
||||
"keybinding.action.suggestionPageNext.desc": "次の提案ページを表示します(最大12件まで)。",
|
||||
"keybinding.action.suggestionPagePrev": "前のページ",
|
||||
"keybinding.action.suggestionPagePrev.desc": "前の提案ページに戻ります。",
|
||||
"input.insights.tabs.graph": "グラフ",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "文ノード",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "聞き取り中… 最初の字幕まで数秒かかることがあります",
|
||||
"popup.caption.dragHint": "ドラッグで移動 · ダブルクリックで元の位置",
|
||||
"settings.captionRefine": "文脈で字幕を整える",
|
||||
"settings.captionRefine.desc": "確定した字幕の区切り・句読点・聞き間違いを、ローカルAIが前後の文脈に合わせて直します。"
|
||||
"settings.captionRefine.desc": "確定した字幕の区切り・句読点・聞き間違いを、ローカルAIが前後の文脈に合わせて直します。",
|
||||
"settings.captionModel": "リアルタイム字幕モデル",
|
||||
"settings.captionModel.same": "音声入力と同じ",
|
||||
"settings.captionModel.desc": "リアルタイム字幕だけを別のモデルで認識します。音声入力モデルと同時に読み込まれます。"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1764,7 +1764,6 @@
|
|||
"popup.suggestion.hintNext": "다음",
|
||||
"popup.suggestion.hintDismiss": "닫기",
|
||||
"popup.suggestion.hintMove": "이동",
|
||||
"popup.suggestion.hintPage": "페이지",
|
||||
"popup.suggestion.loading": "생성 중…",
|
||||
"keybinding.ui.sectionInput": "입력 제안",
|
||||
"keybinding.action.suggestionAccept": "제안 수락",
|
||||
|
|
@ -1843,10 +1842,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "더 생성 중… (최대 {{max}}개)",
|
||||
"keybinding.action.suggestionPrev": "이전 제안",
|
||||
"keybinding.action.suggestionPrev.desc": "이전 제안 후보로 이동합니다.",
|
||||
"keybinding.action.suggestionPageNext": "다음 페이지",
|
||||
"keybinding.action.suggestionPageNext.desc": "다음 제안 페이지를 봅니다 (최대 12개까지).",
|
||||
"keybinding.action.suggestionPagePrev": "이전 페이지",
|
||||
"keybinding.action.suggestionPagePrev.desc": "이전 제안 페이지로 이동합니다.",
|
||||
"input.insights.tabs.graph": "그래프",
|
||||
"input.graph.description": "내 문장을 노드로, 문장 사이의 관계(무엇이 무엇 뒤에 오는지, 어떤 용어를 공유하는지)를 엣지로 저장해 제안에 개인 문맥을 끌어옵니다. 전부 로컬입니다.",
|
||||
"input.graph.nodes": "문장 노드",
|
||||
|
|
@ -1912,5 +1907,8 @@
|
|||
"popup.caption.waiting": "듣는 중… 첫 자막까지 몇 초 걸릴 수 있어요",
|
||||
"popup.caption.dragHint": "끌어서 이동 · 더블클릭하면 원위치",
|
||||
"settings.captionRefine": "자막 문맥 다듬기",
|
||||
"settings.captionRefine.desc": "확정된 자막을 로컬 AI가 앞뒤 문맥에 맞게 띄어쓰기·문장부호·잘못 들은 단어를 고칩니다."
|
||||
"settings.captionRefine.desc": "확정된 자막을 로컬 AI가 앞뒤 문맥에 맞게 띄어쓰기·문장부호·잘못 들은 단어를 고칩니다.",
|
||||
"settings.captionModel": "실시간 자막 모델",
|
||||
"settings.captionModel.same": "받아쓰기와 같게",
|
||||
"settings.captionModel.desc": "실시간 자막만 다른 모델로 인식합니다. 받아쓰기 모델과 함께 GPU 메모리에 올라갑니다."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "Próxima",
|
||||
"popup.suggestion.hintDismiss": "Descartar",
|
||||
"popup.suggestion.hintMove": "Mover",
|
||||
"popup.suggestion.hintPage": "Página",
|
||||
"popup.suggestion.loading": "Gerando…",
|
||||
"keybinding.ui.sectionInput": "Sugestões de entrada",
|
||||
"keybinding.action.suggestionAccept": "Aceitar sugestão",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "Gerando mais… (até {{max}})",
|
||||
"keybinding.action.suggestionPrev": "Sugestão anterior",
|
||||
"keybinding.action.suggestionPrev.desc": "Vai para o candidato anterior.",
|
||||
"keybinding.action.suggestionPageNext": "Próxima página",
|
||||
"keybinding.action.suggestionPageNext.desc": "Mostra a próxima página de sugestões (até 12 no total).",
|
||||
"keybinding.action.suggestionPagePrev": "Página anterior",
|
||||
"keybinding.action.suggestionPagePrev.desc": "Mostra a página anterior de sugestões.",
|
||||
"input.insights.tabs.graph": "Grafo",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "Nós de frase",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "Ouvindo… a primeira legenda pode levar alguns segundos",
|
||||
"popup.caption.dragHint": "Arraste para mover · clique duplo para restaurar",
|
||||
"settings.captionRefine": "Refinar legendas pelo contexto",
|
||||
"settings.captionRefine.desc": "A IA local corrige espaços, pontuação e palavras mal ouvidas usando as linhas próximas."
|
||||
"settings.captionRefine.desc": "A IA local corrige espaços, pontuação e palavras mal ouvidas usando as linhas próximas.",
|
||||
"settings.captionModel": "Modelo de legendas ao vivo",
|
||||
"settings.captionModel.same": "Igual ao ditado",
|
||||
"settings.captionModel.desc": "Reconhece as legendas ao vivo com um modelo separado, carregado junto com o do ditado."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "Далее",
|
||||
"popup.suggestion.hintDismiss": "Закрыть",
|
||||
"popup.suggestion.hintMove": "Перемещение",
|
||||
"popup.suggestion.hintPage": "Страница",
|
||||
"popup.suggestion.loading": "Генерация…",
|
||||
"keybinding.ui.sectionInput": "Подсказки ввода",
|
||||
"keybinding.action.suggestionAccept": "Принять подсказку",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "Создаётся ещё… (до {{max}})",
|
||||
"keybinding.action.suggestionPrev": "Предыдущая подсказка",
|
||||
"keybinding.action.suggestionPrev.desc": "Перейти к предыдущему варианту.",
|
||||
"keybinding.action.suggestionPageNext": "Следующая страница",
|
||||
"keybinding.action.suggestionPageNext.desc": "Показывает следующую страницу подсказок (до 12 всего).",
|
||||
"keybinding.action.suggestionPagePrev": "Предыдущая страница",
|
||||
"keybinding.action.suggestionPagePrev.desc": "Показывает предыдущую страницу подсказок.",
|
||||
"input.insights.tabs.graph": "Граф",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "Узлы-предложения",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "Слушаю… первый субтитр может появиться через несколько секунд",
|
||||
"popup.caption.dragHint": "Перетащите, чтобы переместить · двойной щелчок — сброс",
|
||||
"settings.captionRefine": "Уточнять субтитры по контексту",
|
||||
"settings.captionRefine.desc": "Локальный ИИ исправляет пробелы, пунктуацию и ослышки в готовых субтитрах по соседним строкам."
|
||||
"settings.captionRefine.desc": "Локальный ИИ исправляет пробелы, пунктуацию и ослышки в готовых субтитрах по соседним строкам.",
|
||||
"settings.captionModel": "Модель живых субтитров",
|
||||
"settings.captionModel.same": "Как для диктовки",
|
||||
"settings.captionModel.desc": "Живые субтитры распознаются отдельной моделью, которая загружается вместе с моделью диктовки."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "ถัดไป",
|
||||
"popup.suggestion.hintDismiss": "ปิด",
|
||||
"popup.suggestion.hintMove": "ย้าย",
|
||||
"popup.suggestion.hintPage": "หน้า",
|
||||
"popup.suggestion.loading": "กำลังสร้าง…",
|
||||
"keybinding.ui.sectionInput": "คำแนะนำการป้อน",
|
||||
"keybinding.action.suggestionAccept": "ยอมรับคำแนะนำ",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "กำลังสร้างเพิ่ม… (สูงสุด {{max}})",
|
||||
"keybinding.action.suggestionPrev": "คำแนะนำก่อนหน้า",
|
||||
"keybinding.action.suggestionPrev.desc": "ย้ายไปยังตัวเลือกก่อนหน้า",
|
||||
"keybinding.action.suggestionPageNext": "หน้าถัดไป",
|
||||
"keybinding.action.suggestionPageNext.desc": "แสดงคำแนะนำหน้าถัดไป (สูงสุด 12 รายการ)",
|
||||
"keybinding.action.suggestionPagePrev": "หน้าก่อนหน้า",
|
||||
"keybinding.action.suggestionPagePrev.desc": "แสดงคำแนะนำหน้าก่อนหน้า",
|
||||
"input.insights.tabs.graph": "กราฟ",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "โหนดประโยค",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "กำลังฟัง… คำบรรยายแรกอาจใช้เวลาสักครู่",
|
||||
"popup.caption.dragHint": "ลากเพื่อย้าย · ดับเบิลคลิกเพื่อรีเซ็ต",
|
||||
"settings.captionRefine": "ขัดเกลาคำบรรยายตามบริบท",
|
||||
"settings.captionRefine.desc": "AI ในเครื่องจะแก้เว้นวรรค เครื่องหมายวรรคตอน และคำที่ได้ยินผิด โดยดูจากบรรทัดรอบข้าง"
|
||||
"settings.captionRefine.desc": "AI ในเครื่องจะแก้เว้นวรรค เครื่องหมายวรรคตอน และคำที่ได้ยินผิด โดยดูจากบรรทัดรอบข้าง",
|
||||
"settings.captionModel": "โมเดลคำบรรยายสด",
|
||||
"settings.captionModel.same": "เหมือนการพิมพ์ด้วยเสียง",
|
||||
"settings.captionModel.desc": "ใช้โมเดลแยกสำหรับคำบรรยายสด โดยโหลดคู่กับโมเดลพิมพ์ด้วยเสียง"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "Tiếp",
|
||||
"popup.suggestion.hintDismiss": "Đóng",
|
||||
"popup.suggestion.hintMove": "Di chuyển",
|
||||
"popup.suggestion.hintPage": "Trang",
|
||||
"popup.suggestion.loading": "Đang tạo…",
|
||||
"keybinding.ui.sectionInput": "Gợi ý nhập liệu",
|
||||
"keybinding.action.suggestionAccept": "Chấp nhận gợi ý",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "Đang tạo thêm… (tối đa {{max}})",
|
||||
"keybinding.action.suggestionPrev": "Gợi ý trước",
|
||||
"keybinding.action.suggestionPrev.desc": "Chuyển về ứng viên trước đó.",
|
||||
"keybinding.action.suggestionPageNext": "Trang tiếp theo",
|
||||
"keybinding.action.suggestionPageNext.desc": "Hiển thị trang gợi ý tiếp theo (tối đa 12 gợi ý).",
|
||||
"keybinding.action.suggestionPagePrev": "Trang trước",
|
||||
"keybinding.action.suggestionPagePrev.desc": "Hiển thị trang gợi ý trước đó.",
|
||||
"input.insights.tabs.graph": "Đồ thị",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "Nút câu",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "Đang nghe… phụ đề đầu tiên có thể mất vài giây",
|
||||
"popup.caption.dragHint": "Kéo để di chuyển · nhấp đúp để đặt lại",
|
||||
"settings.captionRefine": "Chỉnh phụ đề theo ngữ cảnh",
|
||||
"settings.captionRefine.desc": "AI cục bộ sửa khoảng trắng, dấu câu và từ nghe nhầm dựa trên các dòng xung quanh."
|
||||
"settings.captionRefine.desc": "AI cục bộ sửa khoảng trắng, dấu câu và từ nghe nhầm dựa trên các dòng xung quanh.",
|
||||
"settings.captionModel": "Mô hình phụ đề trực tiếp",
|
||||
"settings.captionModel.same": "Giống đọc chính tả",
|
||||
"settings.captionModel.desc": "Phụ đề trực tiếp dùng mô hình riêng, được tải cùng mô hình đọc chính tả."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "下一個",
|
||||
"popup.suggestion.hintDismiss": "關閉",
|
||||
"popup.suggestion.hintMove": "移動",
|
||||
"popup.suggestion.hintPage": "翻頁",
|
||||
"popup.suggestion.loading": "產生中…",
|
||||
"keybinding.ui.sectionInput": "輸入建議",
|
||||
"keybinding.action.suggestionAccept": "接受建議",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "正在產生更多…(最多 {{max}} 則)",
|
||||
"keybinding.action.suggestionPrev": "上一則建議",
|
||||
"keybinding.action.suggestionPrev.desc": "移動到上一則候選。",
|
||||
"keybinding.action.suggestionPageNext": "下一頁",
|
||||
"keybinding.action.suggestionPageNext.desc": "顯示下一頁建議(最多 12 則)。",
|
||||
"keybinding.action.suggestionPagePrev": "上一頁",
|
||||
"keybinding.action.suggestionPagePrev.desc": "顯示上一頁建議。",
|
||||
"input.insights.tabs.graph": "圖譜",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "句子節點",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "聆聽中… 第一則字幕可能需要幾秒鐘",
|
||||
"popup.caption.dragHint": "拖曳以移動 · 按兩下還原",
|
||||
"settings.captionRefine": "依上下文潤飾字幕",
|
||||
"settings.captionRefine.desc": "本機 AI 會依上下文修正已確定字幕的空格、標點與聽錯的詞。"
|
||||
"settings.captionRefine.desc": "本機 AI 會依上下文修正已確定字幕的空格、標點與聽錯的詞。",
|
||||
"settings.captionModel": "即時字幕模型",
|
||||
"settings.captionModel.same": "與聽寫相同",
|
||||
"settings.captionModel.desc": "僅即時字幕使用獨立模型辨識,會與聽寫模型一同載入。"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@
|
|||
"popup.suggestion.hintNext": "下一个",
|
||||
"popup.suggestion.hintDismiss": "关闭",
|
||||
"popup.suggestion.hintMove": "移动",
|
||||
"popup.suggestion.hintPage": "翻页",
|
||||
"popup.suggestion.loading": "生成中…",
|
||||
"keybinding.ui.sectionInput": "输入建议",
|
||||
"keybinding.action.suggestionAccept": "接受建议",
|
||||
|
|
@ -454,10 +453,6 @@
|
|||
"popup.suggestion.hintGeneratingMore": "正在生成更多…(最多 {{max}} 条)",
|
||||
"keybinding.action.suggestionPrev": "上一条建议",
|
||||
"keybinding.action.suggestionPrev.desc": "移动到上一条候选。",
|
||||
"keybinding.action.suggestionPageNext": "下一页",
|
||||
"keybinding.action.suggestionPageNext.desc": "显示下一页建议(最多 12 条)。",
|
||||
"keybinding.action.suggestionPagePrev": "上一页",
|
||||
"keybinding.action.suggestionPagePrev.desc": "显示上一页建议。",
|
||||
"input.insights.tabs.graph": "图谱",
|
||||
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
|
||||
"input.graph.nodes": "句子节点",
|
||||
|
|
@ -524,5 +519,8 @@
|
|||
"popup.caption.waiting": "正在聆听… 第一条字幕可能需要几秒钟",
|
||||
"popup.caption.dragHint": "拖动以移动 · 双击复位",
|
||||
"settings.captionRefine": "按上下文润色字幕",
|
||||
"settings.captionRefine.desc": "本地 AI 会根据上下文修正已确定字幕的空格、标点和听错的词。"
|
||||
"settings.captionRefine.desc": "本地 AI 会根据上下文修正已确定字幕的空格、标点和听错的词。",
|
||||
"settings.captionModel": "实时字幕模型",
|
||||
"settings.captionModel.same": "与听写相同",
|
||||
"settings.captionModel.desc": "仅实时字幕使用单独的模型识别,会与听写模型一同加载。"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue