Phase 14 구현: 회의 모드 (Meeting Mode)
실시간 녹음 + 타임스탬프 메모 + STT 전사 + LLM 구조화 회의록 + PDF/MD 내보내기. CaptionService 연동, 동시 사용 충돌 방지, 긴 회의 2-pass 요약 지원. DB 2테이블, IPC 15채널, UI 3뷰(목록/녹음/상세), 12개 locale i18n.
This commit is contained in:
parent
dd68fc9ccd
commit
d0c4f9ee53
38 changed files with 2550 additions and 769 deletions
|
|
@ -1,13 +1,11 @@
|
|||
{
|
||||
"app.name": "D3RO Voice",
|
||||
"app.tagline": "Local AI Voice Assistant",
|
||||
|
||||
"nav.dashboard": "Dashboard",
|
||||
"nav.history": "History",
|
||||
"nav.dictionary": "Dictionary",
|
||||
"nav.commands": "Commands",
|
||||
"nav.settings": "Settings",
|
||||
|
||||
"dashboard.sessionOverview": "Session Overview",
|
||||
"dashboard.systemStatus": "System Status",
|
||||
"dashboard.sessionsToday": "Today's Sessions",
|
||||
|
|
@ -26,7 +24,6 @@
|
|||
"dashboard.entries": "{{count}} entries",
|
||||
"dashboard.stat": "Stats",
|
||||
"dashboard.sys": "System",
|
||||
|
||||
"history.title": "Transcription History",
|
||||
"history.search": "Search...",
|
||||
"history.entries": "{{count}} entries",
|
||||
|
|
@ -34,7 +31,6 @@
|
|||
"history.noResults": "No results found",
|
||||
"history.noHistory": "No history — start recording",
|
||||
"history.count": "{{count}} entries",
|
||||
|
||||
"dictionary.title": "Custom Dictionary",
|
||||
"dictionary.words": "{{count}} words",
|
||||
"dictionary.add": "Add",
|
||||
|
|
@ -47,7 +43,6 @@
|
|||
"dictionary.addTitle": "Add Word",
|
||||
"dictionary.word": "Word",
|
||||
"dictionary.pronunciation": "Pronunciation (optional)",
|
||||
|
||||
"commands.title": "LLM Commands",
|
||||
"commands.count": "{{count}} commands",
|
||||
"commands.add": "Add",
|
||||
|
|
@ -62,14 +57,12 @@
|
|||
"commands.promptTemplate": "Prompt Template",
|
||||
"commands.promptHelp": "{{text}} will be replaced with the transcribed text",
|
||||
"commands.defaultPrompt": "Please refine the following: {{text}}",
|
||||
|
||||
"settings.title": "Settings",
|
||||
"settings.tabs.general": "General",
|
||||
"settings.tabs.audio": "Audio",
|
||||
"settings.tabs.stt": "STT",
|
||||
"settings.tabs.llm": "LLM",
|
||||
"settings.tabs.about": "About",
|
||||
|
||||
"settings.shortcuts": "Shortcuts",
|
||||
"settings.dictation": "Dictation",
|
||||
"settings.dictation.desc": "Hold to speak. Transcription begins when you release the key.",
|
||||
|
|
@ -89,20 +82,17 @@
|
|||
"settings.notSet": "Not set",
|
||||
"settings.enabled": "Enabled",
|
||||
"settings.disabled": "Disabled",
|
||||
|
||||
"settings.interface": "Interface",
|
||||
"settings.theme": "Theme",
|
||||
"settings.theme.system": "System",
|
||||
"settings.theme.light": "Light",
|
||||
"settings.theme.dark": "Dark",
|
||||
"settings.language": "Language",
|
||||
|
||||
"settings.appBehavior": "App Behavior",
|
||||
"settings.closeToTray": "Minimize to tray on close",
|
||||
"settings.autoLaunch": "Launch at system startup",
|
||||
"settings.autoInsert": "Auto-insert text after transcription",
|
||||
"settings.soundEffects": "Sound Effects",
|
||||
|
||||
"settings.microphone": "Microphone",
|
||||
"settings.inputDevice": "Input Device",
|
||||
"settings.deviceDefault": "(Default)",
|
||||
|
|
@ -110,7 +100,6 @@
|
|||
"settings.insertMethod": "Insert Method",
|
||||
"settings.insertClipboard": "Clipboard (Ctrl+V)",
|
||||
"settings.insertKeyboard": "Keyboard Typing",
|
||||
|
||||
"settings.whisperModel": "Whisper Model",
|
||||
"settings.model.tiny": "tiny (39 MB, fastest)",
|
||||
"settings.model.base": "base (74 MB, balanced)",
|
||||
|
|
@ -119,7 +108,6 @@
|
|||
"settings.model.large": "large-v3 (1.5 GB, best)",
|
||||
"settings.sttLanguage": "Recognition Language",
|
||||
"settings.sttLang.auto": "Auto-detect",
|
||||
|
||||
"settings.ollamaServer": "Ollama Server",
|
||||
"settings.ollamaUrl": "Ollama Server URL",
|
||||
"settings.ollamaHint": "Connects automatically when Ollama is running. Pull models directly in Ollama (e.g. ollama pull qwen3:4b).",
|
||||
|
|
@ -132,7 +120,6 @@
|
|||
"settings.action.grammar": "Grammar Correction",
|
||||
"settings.action.custom": "Custom Prompt",
|
||||
"settings.actionHint": "The selected LLM post-processing will be applied to your transcription after recording. Only works when Ollama is connected.",
|
||||
|
||||
"settings.about.version": "Version",
|
||||
"settings.about.techStack": "Tech Stack",
|
||||
"settings.about.techStackValue": "Electron + React 19 + MUI 7 + TypeScript",
|
||||
|
|
@ -140,13 +127,11 @@
|
|||
"settings.about.voiceEngineValue": "STT: faster-whisper (local) / LLM: Ollama (local)",
|
||||
"settings.about.description": "A fully local AI voice assistant built on Speakly reverse-engineering insights. Runs entirely offline with no cloud dependencies.",
|
||||
"settings.about.restartOnboarding": "Restart Setup Wizard",
|
||||
|
||||
"status.ollama": "OLLAMA",
|
||||
"status.offline": "OFFLINE",
|
||||
"status.nudge.title": "Ollama is not running",
|
||||
"status.nudge.desc": "Ollama is required for LLM post-processing (translation, summarization, etc.).",
|
||||
"status.nudge.guide": "View setup guide →",
|
||||
|
||||
"onboarding.welcome.title": "D3RO-VOICE",
|
||||
"onboarding.welcome.desc": "No typing needed — just speak. Your local AI voice assistant.",
|
||||
"onboarding.welcome.start": "Get Started",
|
||||
|
|
@ -167,7 +152,6 @@
|
|||
"onboarding.done.start": "Start Using",
|
||||
"onboarding.back": "Back",
|
||||
"onboarding.next": "Next",
|
||||
|
||||
"hotkey.title": "Set Shortcut",
|
||||
"hotkey.dictationTitle": "Set Dictation Shortcut",
|
||||
"hotkey.oneTouchTitle": "Set One-Touch Mode Shortcut",
|
||||
|
|
@ -179,7 +163,6 @@
|
|||
"hotkey.current": "Current: {{keys}}",
|
||||
"hotkey.hint": "Enter a combination (e.g. Ctrl+Shift+Q) or a single key (e.g. F5)",
|
||||
"hotkey.reset": "Clear",
|
||||
|
||||
"ollama.title": "OLLAMA SETUP GUIDE",
|
||||
"ollama.step1.title": "STEP 1 — Install Ollama",
|
||||
"ollama.step1.desc": "Ollama is a free tool for running LLMs locally.",
|
||||
|
|
@ -188,7 +171,6 @@
|
|||
"ollama.step2.alt": "Or a larger model: ollama pull qwen3:8b (more accurate, slower)",
|
||||
"ollama.step3.title": "STEP 3 — Auto-Connect",
|
||||
"ollama.step3.desc": "Once Ollama is running, D3RO-VOICE will detect it automatically. When the status bar LED turns from red to green, you're ready!",
|
||||
|
||||
"service.sttEngine": "STT ENGINE",
|
||||
"service.ollamaLlm": "OLLAMA LLM",
|
||||
"service.hotkeyHook": "HOTKEY HOOK",
|
||||
|
|
@ -198,7 +180,6 @@
|
|||
"service.offline": "OFFLINE",
|
||||
"service.active": "ACTIVE",
|
||||
"service.standby": "STANDBY",
|
||||
|
||||
"common.cancel": "Cancel",
|
||||
"common.save": "Save",
|
||||
"common.delete": "Delete",
|
||||
|
|
@ -210,7 +191,6 @@
|
|||
"common.copy": "Copy",
|
||||
"common.test": "Test",
|
||||
"common.stop": "Stop",
|
||||
|
||||
"memo.tags": "Tags",
|
||||
"memo.addTag": "Add Tag",
|
||||
"memo.removeTag": "Remove Tag",
|
||||
|
|
@ -221,7 +201,6 @@
|
|||
"memo.filterByTag": "Filter by tag",
|
||||
"memo.allTags": "All Tags",
|
||||
"memo.clearFilter": "Clear filter",
|
||||
|
||||
"voiceCommand.title": "Voice Commands",
|
||||
"voiceCommand.enabled": "Voice Keyword Recognition",
|
||||
"voiceCommand.enabledDesc": "Detects keywords at the start of transcription to auto-select commands.",
|
||||
|
|
@ -232,7 +211,6 @@
|
|||
"voiceCommand.matchMode.prefix": "Starts with",
|
||||
"voiceCommand.matchMode.suffix": "Ends with",
|
||||
"voiceCommand.matchMode.contains": "Contains",
|
||||
|
||||
"chain.title": "LLM Chains",
|
||||
"chain.count": "{{count}} chains",
|
||||
"chain.add": "Add Chain",
|
||||
|
|
@ -251,24 +229,19 @@
|
|||
"chain.noChains": "No chains — create a pipeline to run multiple commands in sequence",
|
||||
"chain.step": "Step {{n}}",
|
||||
"chain.progress": "Processing step {{current}}/{{total}}",
|
||||
|
||||
"context.title": "Screen Context",
|
||||
"context.enabled": "Screen Context",
|
||||
"context.enabledDesc": "Captures active app and selected text when recording starts, and sends it to the LLM.",
|
||||
|
||||
"dashboard.caption": "Live Caption",
|
||||
"dashboard.captionStart": "Start Caption",
|
||||
"dashboard.captionStop": "Stop Caption",
|
||||
"dashboard.captionActive": "Caption Active",
|
||||
|
||||
"settings.voiceCommands": "Voice Commands",
|
||||
"settings.voiceCommands.desc": "Detects keywords in transcription to auto-select commands.",
|
||||
"settings.screenContext": "Screen Context",
|
||||
"settings.screenContext.desc": "Sends active app info and selected text to the LLM during recording.",
|
||||
|
||||
"date.today": "Today",
|
||||
"date.yesterday": "Yesterday",
|
||||
|
||||
"license.title": "License",
|
||||
"license.currentTier": "Current Tier",
|
||||
"license.free": "FREE",
|
||||
|
|
@ -343,7 +316,6 @@
|
|||
"license.unlimited": "Unlimited",
|
||||
"license.locked": "Locked",
|
||||
"license.nav": "License",
|
||||
|
||||
"fileTranscription.title": "File Transcription",
|
||||
"fileTranscription.dropZone": "Drop audio/video file here",
|
||||
"fileTranscription.dropZoneHint": "Supports MP3, WAV, M4A, MP4, MKV, WEBM",
|
||||
|
|
@ -356,7 +328,6 @@
|
|||
"fileTranscription.retry": "Retry",
|
||||
"fileTranscription.error.invalidFormat": "Unsupported file format",
|
||||
"fileTranscription.error.unknown": "Unknown error",
|
||||
|
||||
"meetingSummary.title": "Meeting Summary",
|
||||
"meetingSummary.generating": "Generating summary...",
|
||||
"meetingSummary.summary": "Summary",
|
||||
|
|
@ -365,7 +336,6 @@
|
|||
"meetingSummary.exportMarkdown": "Export as Markdown",
|
||||
"meetingSummary.noSummary": "No summary available",
|
||||
"meetingSummary.generate": "Generate Summary",
|
||||
|
||||
"template.title": "Dictation Templates",
|
||||
"template.create": "New Template",
|
||||
"template.edit": "Edit Template",
|
||||
|
|
@ -381,7 +351,6 @@
|
|||
"template.startSession": "Start",
|
||||
"template.cancelSession": "Cancel Session",
|
||||
"template.empty": "No templates",
|
||||
|
||||
"nav.conversation": "Talk",
|
||||
"conversation.title": "Voice Conversation",
|
||||
"conversation.idle": "Idle",
|
||||
|
|
@ -393,7 +362,6 @@
|
|||
"conversation.inputPlaceholder": "Type a message...",
|
||||
"conversation.end": "End",
|
||||
"conversation.clearHistory": "Clear history",
|
||||
|
||||
"nav.knowledge": "Knowledge",
|
||||
"rag.title": "Knowledge Base",
|
||||
"rag.addDocument": "Add Document",
|
||||
|
|
@ -410,12 +378,56 @@
|
|||
"rag.sources": "Sources",
|
||||
"rag.adding": "Adding...",
|
||||
"rag.parsing": "Parsing document...",
|
||||
|
||||
"voiceAction.title": "Voice Actions",
|
||||
"voiceAction.execute": "Execute",
|
||||
"voiceAction.presets": "Preset Commands",
|
||||
"voiceAction.history": "Action History",
|
||||
"voiceAction.noHistory": "No action history",
|
||||
"voiceAction.blocked": "Blocked (unsafe)",
|
||||
"voiceAction.executed": "Executed"
|
||||
"voiceAction.executed": "Executed",
|
||||
"settings.theme.nord": "Nord",
|
||||
"settings.theme.solarized": "Solarized",
|
||||
"settings.theme.catppuccin": "Catppuccin",
|
||||
"settings.theme.dracula": "Dracula",
|
||||
"settings.sttLang.ko": "한국어 (Korean)",
|
||||
"settings.sttLang.en": "English",
|
||||
"settings.sttLang.ja": "日本語 (Japanese)",
|
||||
"settings.sttLang.zh": "中文 (Chinese)",
|
||||
"template.outputHelperText": "Use {{fieldName}} for placeholders",
|
||||
"nav.meeting": "Meeting",
|
||||
"meeting.title": "Meeting Mode",
|
||||
"meeting.newMeeting": "New Meeting",
|
||||
"meeting.startRecording": "Start Recording",
|
||||
"meeting.stopRecording": "Stop Recording",
|
||||
"meeting.recording": "Recording",
|
||||
"meeting.processing": "Generating minutes...",
|
||||
"meeting.completed": "Completed",
|
||||
"meeting.error": "Error",
|
||||
"meeting.elapsed": "Elapsed",
|
||||
"meeting.memoPlaceholder": "Type a memo (Enter to add)",
|
||||
"meeting.memoAdded": "Memo added",
|
||||
"meeting.noSessions": "No meeting recordings",
|
||||
"meeting.noSessionsDesc": "Press New Meeting to start recording",
|
||||
"meeting.summary": "Summary",
|
||||
"meeting.decisions": "Decisions",
|
||||
"meeting.actionItems": "Action Items",
|
||||
"meeting.timeline": "Timeline",
|
||||
"meeting.transcript": "Raw Transcript",
|
||||
"meeting.memos": "Memos",
|
||||
"meeting.exportPdf": "Export PDF",
|
||||
"meeting.exportMarkdown": "Export Markdown",
|
||||
"meeting.delete": "Delete",
|
||||
"meeting.deleteConfirm": "Delete this meeting record?",
|
||||
"meeting.backToList": "Back to List",
|
||||
"meeting.notificationTitle": "Minutes Ready",
|
||||
"meeting.notificationBody": "Meeting minutes have been generated.",
|
||||
"meeting.sessions": "{{count}} sessions",
|
||||
"meeting.duration": "{{minutes}} min",
|
||||
"meeting.editTitle": "Edit Title",
|
||||
"meeting.untitled": "Untitled Meeting",
|
||||
"meeting.processingStep.merging": "Merging transcript...",
|
||||
"meeting.processingStep.generating": "Generating minutes with LLM...",
|
||||
"meeting.processingStep.parsing": "Parsing minutes...",
|
||||
"meeting.processingStep.saving": "Saving...",
|
||||
"meeting.processingStep.notifying": "Sending notification..."
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue