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:
Yun Chan 2026-04-08 01:16:52 +09:00
parent dd68fc9ccd
commit d0c4f9ee53
38 changed files with 2550 additions and 769 deletions

View file

@ -1,13 +1,11 @@
{
"app.name": "D3RO Voice",
"app.tagline": "Lokaler KI-Sprachassistent",
"nav.dashboard": "Dashboard",
"nav.history": "Verlauf",
"nav.dictionary": "Wörterbuch",
"nav.commands": "Befehle",
"nav.settings": "Einstellungen",
"dashboard.sessionOverview": "Sitzungsübersicht",
"dashboard.systemStatus": "Systemstatus",
"dashboard.sessionsToday": "Sitzungen heute",
@ -26,7 +24,6 @@
"dashboard.entries": "{{count}} Einträge",
"dashboard.stat": "Statistiken",
"dashboard.sys": "System",
"history.title": "Transkriptionsverlauf",
"history.search": "Suchen...",
"history.entries": "{{count}} Einträge",
@ -34,7 +31,6 @@
"history.noResults": "Keine Ergebnisse",
"history.noHistory": "Kein Verlauf — starte eine Aufnahme",
"history.count": "{{count}} Einträge",
"dictionary.title": "Benutzerwörterbuch",
"dictionary.words": "{{count}} Wörter",
"dictionary.add": "Hinzufügen",
@ -47,7 +43,6 @@
"dictionary.addTitle": "Wort hinzufügen",
"dictionary.word": "Wort",
"dictionary.pronunciation": "Aussprache (optional)",
"commands.title": "LLM-Befehle",
"commands.count": "{{count}} Befehle",
"commands.add": "Hinzufügen",
@ -62,14 +57,12 @@
"commands.promptTemplate": "Prompt-Vorlage",
"commands.promptHelp": "{{text}} wird durch den transkribierten Text ersetzt",
"commands.defaultPrompt": "Bitte verbessere {{text}}.",
"settings.title": "Einstellungen",
"settings.tabs.general": "Allgemein",
"settings.tabs.audio": "Audio",
"settings.tabs.stt": "STT",
"settings.tabs.llm": "LLM",
"settings.tabs.about": "Über",
"settings.shortcuts": "Tastenkürzel",
"settings.dictation": "Diktat",
"settings.dictation.desc": "Gedrückt halten zum Sprechen. Die Transkription beginnt beim Loslassen.",
@ -82,20 +75,17 @@
"settings.notSet": "Nicht festgelegt",
"settings.enabled": "Aktiviert",
"settings.disabled": "Deaktiviert",
"settings.interface": "Oberfläche",
"settings.theme": "Design",
"settings.theme.system": "System",
"settings.theme.light": "Hell",
"settings.theme.dark": "Dunkel",
"settings.language": "Sprache",
"settings.appBehavior": "App-Verhalten",
"settings.closeToTray": "In Systembereich minimieren",
"settings.autoLaunch": "Beim Systemstart automatisch starten",
"settings.autoInsert": "Text nach der Transkription automatisch einfügen",
"settings.soundEffects": "Soundeffekte",
"settings.microphone": "Mikrofon",
"settings.inputDevice": "Eingabegerät",
"settings.deviceDefault": "(Standard)",
@ -103,7 +93,6 @@
"settings.insertMethod": "Einfügemethode",
"settings.insertClipboard": "Zwischenablage (Ctrl+V)",
"settings.insertKeyboard": "Tastatureingabe",
"settings.whisperModel": "Whisper-Modell",
"settings.model.tiny": "tiny (39 MB, am schnellsten)",
"settings.model.base": "base (74 MB, ausgewogen)",
@ -112,7 +101,6 @@
"settings.model.large": "large-v3 (1,5 GB, beste Qualität)",
"settings.sttLanguage": "Erkennungssprache",
"settings.sttLang.auto": "Automatische Erkennung",
"settings.ollamaServer": "Ollama-Server",
"settings.ollamaUrl": "Ollama-Server-URL",
"settings.ollamaHint": "D3RO Voice verbindet sich automatisch, wenn Ollama läuft. Lade Modelle direkt über Ollama herunter (z. B.: ollama pull qwen3:4b).",
@ -125,7 +113,6 @@
"settings.action.grammar": "Grammatikkorrektur",
"settings.action.custom": "Benutzerdefinierter Prompt",
"settings.actionHint": "Die gewählte LLM-Nachbearbeitung wird auf den transkribierten Text angewendet, nachdem mit dem Tastenkürzel aufgenommen wurde. Funktioniert nur, wenn Ollama verbunden ist.",
"settings.about.version": "Version",
"settings.about.techStack": "Tech-Stack",
"settings.about.techStackValue": "Electron + React 19 + MUI 7 + TypeScript",
@ -133,13 +120,11 @@
"settings.about.voiceEngineValue": "STT: faster-whisper (lokal) / LLM: Ollama (lokal)",
"settings.about.description": "Vollständig lokaler KI-Sprachassistent, basierend auf Reverse Engineering von Speakly. Funktioniert ohne Cloud-Abhängigkeiten.",
"settings.about.restartOnboarding": "Einrichtungsanleitung erneut anzeigen",
"status.ollama": "OLLAMA",
"status.offline": "OFFLINE",
"status.nudge.title": "Ollama läuft nicht",
"status.nudge.desc": "Ollama wird für die LLM-Nachbearbeitung (Übersetzung, Zusammenfassung usw.) benötigt.",
"status.nudge.guide": "Installationsanleitung anzeigen →",
"onboarding.welcome.title": "D3RO-VOICE",
"onboarding.welcome.desc": "Ohne Tippen, per Sprache. Dein lokaler KI-Sprachassistent.",
"onboarding.welcome.start": "Loslegen",
@ -160,7 +145,6 @@
"onboarding.done.start": "Loslegen",
"onboarding.back": "Zurück",
"onboarding.next": "Weiter",
"hotkey.title": "Tastenkürzel einrichten",
"hotkey.dictationTitle": "Diktat-Tastenkürzel einrichten",
"hotkey.oneTouchTitle": "Tastenkürzel für Ein-Tasten-Modus einrichten",
@ -171,7 +155,6 @@
"hotkey.current": "Aktuell: {{keys}}",
"hotkey.hint": "Gib eine Kombination (z. B. Ctrl+Shift+Q) oder eine einzelne Taste (z. B. F5) ein",
"hotkey.reset": "Erneut eingeben",
"ollama.title": "OLLAMA EINRICHTUNGSANLEITUNG",
"ollama.step1.title": "SCHRITT 1 — Ollama installieren",
"ollama.step1.desc": "Ollama ist ein kostenloses Tool zum lokalen Ausführen von LLMs.",
@ -180,7 +163,6 @@
"ollama.step2.alt": "Oder ein größeres Modell: ollama pull qwen3:8b (genauer, langsamer)",
"ollama.step3.title": "SCHRITT 3 — Automatische Verbindung",
"ollama.step3.desc": "D3RO-VOICE erkennt automatisch, wenn Ollama läuft. Wenn die LED in der Statusleiste von Rot auf Grün wechselt, ist alles bereit!",
"service.sttEngine": "STT-ENGINE",
"service.ollamaLlm": "OLLAMA LLM",
"service.hotkeyHook": "TASTENKÜRZEL",
@ -190,7 +172,6 @@
"service.offline": "OFFLINE",
"service.active": "AKTIV",
"service.standby": "BEREITSCHAFT",
"common.cancel": "Abbrechen",
"common.save": "Speichern",
"common.delete": "Löschen",
@ -202,7 +183,51 @@
"common.copy": "Kopieren",
"common.test": "Testen",
"common.stop": "Stoppen",
"date.today": "Heute",
"date.yesterday": "Gestern"
"date.yesterday": "Gestern",
"settings.theme.nord": "Nord",
"settings.theme.solarized": "Solarized",
"settings.theme.catppuccin": "Catppuccin",
"settings.theme.dracula": "Dracula",
"settings.sttLang.ko": "Koreanisch",
"settings.sttLang.en": "Englisch",
"settings.sttLang.ja": "Japanisch",
"settings.sttLang.zh": "Chinesisch",
"template.outputHelperText": "Verwenden Sie {{Feldname}} für Platzhalter",
"nav.meeting": "Meeting",
"meeting.title": "Meeting-Modus",
"meeting.newMeeting": "Neues Meeting",
"meeting.startRecording": "Aufnahme starten",
"meeting.stopRecording": "Aufnahme beenden",
"meeting.recording": "Aufnahme läuft",
"meeting.processing": "Protokoll wird erstellt...",
"meeting.completed": "Abgeschlossen",
"meeting.error": "Fehler",
"meeting.elapsed": "Vergangen",
"meeting.memoPlaceholder": "Memo eingeben (Enter zum Hinzufügen)",
"meeting.memoAdded": "Memo hinzugefügt",
"meeting.noSessions": "Keine Meeting-Aufnahmen",
"meeting.noSessionsDesc": "Drücke «Neues Meeting», um die Aufnahme zu starten",
"meeting.summary": "Zusammenfassung",
"meeting.decisions": "Beschlüsse",
"meeting.actionItems": "Aufgaben",
"meeting.timeline": "Zeitlinie",
"meeting.transcript": "Rohtranskript",
"meeting.memos": "Memos",
"meeting.exportPdf": "Als PDF exportieren",
"meeting.exportMarkdown": "Als Markdown exportieren",
"meeting.delete": "Löschen",
"meeting.deleteConfirm": "Diesen Meeting-Eintrag löschen?",
"meeting.backToList": "Zurück zur Liste",
"meeting.notificationTitle": "Protokoll fertig",
"meeting.notificationBody": "Das Meeting-Protokoll wurde erstellt.",
"meeting.sessions": "{{count}} Sitzungen",
"meeting.duration": "{{minutes}} Min.",
"meeting.editTitle": "Titel bearbeiten",
"meeting.untitled": "Meeting ohne Titel",
"meeting.processingStep.merging": "Transkript zusammenführen...",
"meeting.processingStep.generating": "Protokoll mit LLM erstellen...",
"meeting.processingStep.parsing": "Protokoll analysieren...",
"meeting.processingStep.saving": "Speichern...",
"meeting.processingStep.notifying": "Benachrichtigung senden..."
}