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": "로컬 AI 음성 어시스턴트",
|
||||
|
||||
"nav.dashboard": "대시보드",
|
||||
"nav.history": "히스토리",
|
||||
"nav.dictionary": "사전",
|
||||
"nav.commands": "명령어",
|
||||
"nav.settings": "설정",
|
||||
|
||||
"dashboard.sessionOverview": "세션 개요",
|
||||
"dashboard.systemStatus": "시스템 상태",
|
||||
"dashboard.sessionsToday": "오늘 세션",
|
||||
|
|
@ -26,7 +24,6 @@
|
|||
"dashboard.entries": "{{count}}건",
|
||||
"dashboard.stat": "통계",
|
||||
"dashboard.sys": "시스템",
|
||||
|
||||
"history.title": "전사 기록",
|
||||
"history.search": "검색...",
|
||||
"history.entries": "{{count}}건",
|
||||
|
|
@ -34,7 +31,6 @@
|
|||
"history.noResults": "검색 결과 없음",
|
||||
"history.noHistory": "히스토리 없음 — 녹음을 시작하세요",
|
||||
"history.count": "{{count}}건",
|
||||
|
||||
"dictionary.title": "커스텀 사전",
|
||||
"dictionary.words": "{{count}}개",
|
||||
"dictionary.add": "추가",
|
||||
|
|
@ -47,7 +43,6 @@
|
|||
"dictionary.addTitle": "단어 추가",
|
||||
"dictionary.word": "단어",
|
||||
"dictionary.pronunciation": "발음 (선택)",
|
||||
|
||||
"commands.title": "LLM 명령어",
|
||||
"commands.count": "{{count}}개",
|
||||
"commands.add": "추가",
|
||||
|
|
@ -62,14 +57,12 @@
|
|||
"commands.promptTemplate": "프롬프트 템플릿",
|
||||
"commands.promptHelp": "{{text}}는 전사된 텍스트로 치환됩니다",
|
||||
"commands.defaultPrompt": "{{text}}를 다듬어주세요.",
|
||||
|
||||
"settings.title": "설정",
|
||||
"settings.tabs.general": "일반",
|
||||
"settings.tabs.audio": "오디오",
|
||||
"settings.tabs.stt": "STT",
|
||||
"settings.tabs.llm": "LLM",
|
||||
"settings.tabs.about": "정보",
|
||||
|
||||
"settings.shortcuts": "단축키",
|
||||
"settings.dictation": "받아쓰기",
|
||||
"settings.dictation.desc": "누른 상태에서 말하기. 키를 놓으면 전사가 시작됩니다.",
|
||||
|
|
@ -89,20 +82,17 @@
|
|||
"settings.notSet": "미설정",
|
||||
"settings.enabled": "활성화됨",
|
||||
"settings.disabled": "비활성화",
|
||||
|
||||
"settings.interface": "인터페이스",
|
||||
"settings.theme": "테마",
|
||||
"settings.theme.system": "시스템",
|
||||
"settings.theme.light": "라이트",
|
||||
"settings.theme.dark": "다크",
|
||||
"settings.language": "언어",
|
||||
|
||||
"settings.appBehavior": "앱 동작",
|
||||
"settings.closeToTray": "트레이로 최소화",
|
||||
"settings.autoLaunch": "시스템 시작 시 자동 실행",
|
||||
"settings.autoInsert": "전사 후 자동 텍스트 삽입",
|
||||
"settings.soundEffects": "효과음",
|
||||
|
||||
"settings.microphone": "마이크",
|
||||
"settings.inputDevice": "입력 장치",
|
||||
"settings.deviceDefault": "(기본)",
|
||||
|
|
@ -110,7 +100,6 @@
|
|||
"settings.insertMethod": "삽입 방식",
|
||||
"settings.insertClipboard": "클립보드 (Ctrl+V)",
|
||||
"settings.insertKeyboard": "키보드 타이핑",
|
||||
|
||||
"settings.whisperModel": "Whisper 모델",
|
||||
"settings.model.tiny": "tiny (39 MB, 가장 빠름)",
|
||||
"settings.model.base": "base (74 MB, 균형)",
|
||||
|
|
@ -119,7 +108,6 @@
|
|||
"settings.model.large": "large-v3 (1.5 GB, 최고)",
|
||||
"settings.sttLanguage": "인식 언어",
|
||||
"settings.sttLang.auto": "자동 감지",
|
||||
|
||||
"settings.ollamaServer": "Ollama 서버",
|
||||
"settings.ollamaUrl": "Ollama 서버 URL",
|
||||
"settings.ollamaHint": "Ollama가 실행 중이면 자동으로 연결됩니다. 모델은 Ollama에서 직접 pull하세요 (예: ollama pull qwen3:4b).",
|
||||
|
|
@ -132,7 +120,6 @@
|
|||
"settings.action.grammar": "문법 교정",
|
||||
"settings.action.custom": "커스텀 프롬프트",
|
||||
"settings.actionHint": "핫키로 녹음 후 전사된 텍스트에 선택한 LLM 후처리가 적용됩니다. Ollama가 연결되어 있을 때만 동작합니다.",
|
||||
|
||||
"settings.about.version": "버전",
|
||||
"settings.about.techStack": "기술 스택",
|
||||
"settings.about.techStackValue": "Electron + React 19 + MUI 7 + TypeScript",
|
||||
|
|
@ -140,13 +127,11 @@
|
|||
"settings.about.voiceEngineValue": "STT: faster-whisper (로컬) / LLM: Ollama (로컬)",
|
||||
"settings.about.description": "Speakly 리버스엔지니어링 노하우 기반 로컬 AI 음성 어시스턴트. 클라우드 의존성 없이 완전 로컬로 동작합니다.",
|
||||
"settings.about.restartOnboarding": "초기 설정 안내 다시 보기",
|
||||
|
||||
"status.ollama": "OLLAMA",
|
||||
"status.offline": "OFFLINE",
|
||||
"status.nudge.title": "Ollama가 실행되지 않고 있어요",
|
||||
"status.nudge.desc": "LLM 후처리(번역, 요약 등)를 사용하려면 Ollama가 필요합니다.",
|
||||
"status.nudge.guide": "설치 안내 보기 →",
|
||||
|
||||
"onboarding.welcome.title": "D3RO-VOICE",
|
||||
"onboarding.welcome.desc": "타이핑 없이, 음성으로. 로컬 AI 음성 어시스턴트입니다.",
|
||||
"onboarding.welcome.start": "시작하기",
|
||||
|
|
@ -167,7 +152,6 @@
|
|||
"onboarding.done.start": "시작하기",
|
||||
"onboarding.back": "뒤로",
|
||||
"onboarding.next": "다음",
|
||||
|
||||
"hotkey.title": "단축키 설정",
|
||||
"hotkey.dictationTitle": "받아쓰기 단축키 설정",
|
||||
"hotkey.oneTouchTitle": "원터치 모드 단축키 설정",
|
||||
|
|
@ -179,7 +163,6 @@
|
|||
"hotkey.current": "현재: {{keys}}",
|
||||
"hotkey.hint": "조합키(예: Ctrl+Shift+Q) 또는 단일키(예: F5)를 입력하세요",
|
||||
"hotkey.reset": "다시 입력",
|
||||
|
||||
"ollama.title": "OLLAMA SETUP GUIDE",
|
||||
"ollama.step1.title": "STEP 1 — Ollama 설치",
|
||||
"ollama.step1.desc": "Ollama는 로컬에서 LLM을 실행하는 무료 도구입니다.",
|
||||
|
|
@ -188,7 +171,6 @@
|
|||
"ollama.step2.alt": "또는 더 큰 모델: ollama pull qwen3:8b (더 정확, 더 느림)",
|
||||
"ollama.step3.title": "STEP 3 — 자동 연결",
|
||||
"ollama.step3.desc": "Ollama가 실행되면 D3RO-VOICE가 자동으로 감지합니다. 하단 상태 바의 LED가 빨간색에서 초록색으로 바뀌면 준비 완료!",
|
||||
|
||||
"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": "취소",
|
||||
"common.save": "저장",
|
||||
"common.delete": "삭제",
|
||||
|
|
@ -210,7 +191,6 @@
|
|||
"common.copy": "복사",
|
||||
"common.test": "테스트",
|
||||
"common.stop": "중지",
|
||||
|
||||
"memo.tags": "태그",
|
||||
"memo.addTag": "태그 추가",
|
||||
"memo.removeTag": "태그 제거",
|
||||
|
|
@ -221,7 +201,6 @@
|
|||
"memo.filterByTag": "태그로 필터",
|
||||
"memo.allTags": "전체 태그",
|
||||
"memo.clearFilter": "필터 해제",
|
||||
|
||||
"voiceCommand.title": "음성 명령어",
|
||||
"voiceCommand.enabled": "음성 키워드 인식",
|
||||
"voiceCommand.enabledDesc": "전사 시작 시 키워드를 감지하여 명령어를 자동 선택합니다.",
|
||||
|
|
@ -232,7 +211,6 @@
|
|||
"voiceCommand.matchMode.prefix": "앞부분 일치",
|
||||
"voiceCommand.matchMode.suffix": "뒷부분 일치",
|
||||
"voiceCommand.matchMode.contains": "포함",
|
||||
|
||||
"chain.title": "LLM 체인",
|
||||
"chain.count": "{{count}}개",
|
||||
"chain.add": "체인 추가",
|
||||
|
|
@ -251,24 +229,19 @@
|
|||
"chain.noChains": "체인 없음 — 여러 명령어를 순차 실행하는 파이프라인을 만들어 보세요",
|
||||
"chain.step": "{{n}}단계",
|
||||
"chain.progress": "{{current}}/{{total}} 단계 처리 중",
|
||||
|
||||
"context.title": "화면 컨텍스트",
|
||||
"context.enabled": "스크린 컨텍스트",
|
||||
"context.enabledDesc": "녹음 시작 시 활성 앱과 선택된 텍스트를 캡처하여 LLM에 전달합니다.",
|
||||
|
||||
"dashboard.caption": "실시간 자막",
|
||||
"dashboard.captionStart": "자막 시작",
|
||||
"dashboard.captionStop": "자막 종료",
|
||||
"dashboard.captionActive": "자막 활성",
|
||||
|
||||
"settings.voiceCommands": "음성 명령어",
|
||||
"settings.voiceCommands.desc": "전사된 텍스트에서 키워드를 감지하여 명령어를 자동 선택합니다.",
|
||||
"settings.screenContext": "화면 컨텍스트",
|
||||
"settings.screenContext.desc": "녹음 시 활성 앱 정보와 선택된 텍스트를 LLM에 함께 전달합니다.",
|
||||
|
||||
"date.today": "오늘",
|
||||
"date.yesterday": "어제",
|
||||
|
||||
"license.title": "라이선스",
|
||||
"license.currentTier": "현재 등급",
|
||||
"license.free": "FREE",
|
||||
|
|
@ -343,7 +316,6 @@
|
|||
"license.unlimited": "무제한",
|
||||
"license.locked": "잠금",
|
||||
"license.nav": "라이선스",
|
||||
|
||||
"fileTranscription.title": "파일 전사",
|
||||
"fileTranscription.dropZone": "오디오/비디오 파일을 여기에 드래그하세요",
|
||||
"fileTranscription.dropZoneHint": "MP3, WAV, M4A, MP4, MKV, WEBM 지원",
|
||||
|
|
@ -356,7 +328,6 @@
|
|||
"fileTranscription.retry": "다시 시도",
|
||||
"fileTranscription.error.invalidFormat": "지원하지 않는 파일 형식입니다",
|
||||
"fileTranscription.error.unknown": "알 수 없는 오류",
|
||||
|
||||
"meetingSummary.title": "회의록 요약",
|
||||
"meetingSummary.generating": "요약 생성 중...",
|
||||
"meetingSummary.summary": "요약",
|
||||
|
|
@ -365,7 +336,6 @@
|
|||
"meetingSummary.exportMarkdown": "마크다운 내보내기",
|
||||
"meetingSummary.noSummary": "요약이 없습니다",
|
||||
"meetingSummary.generate": "요약 생성",
|
||||
|
||||
"template.title": "딕테이션 템플릿",
|
||||
"template.create": "새 템플릿",
|
||||
"template.edit": "템플릿 편집",
|
||||
|
|
@ -381,7 +351,6 @@
|
|||
"template.startSession": "시작",
|
||||
"template.cancelSession": "세션 취소",
|
||||
"template.empty": "템플릿이 없습니다",
|
||||
|
||||
"nav.conversation": "대화",
|
||||
"conversation.title": "음성 대화",
|
||||
"conversation.idle": "대기",
|
||||
|
|
@ -393,7 +362,6 @@
|
|||
"conversation.inputPlaceholder": "메시지 입력...",
|
||||
"conversation.end": "종료",
|
||||
"conversation.clearHistory": "대화 초기화",
|
||||
|
||||
"nav.knowledge": "지식 베이스",
|
||||
"rag.title": "지식 베이스",
|
||||
"rag.addDocument": "문서 추가",
|
||||
|
|
@ -410,12 +378,56 @@
|
|||
"rag.sources": "참조 문서",
|
||||
"rag.adding": "추가 중...",
|
||||
"rag.parsing": "문서 분석 중...",
|
||||
|
||||
"voiceAction.title": "음성 액션",
|
||||
"voiceAction.execute": "실행",
|
||||
"voiceAction.presets": "프리셋 명령",
|
||||
"voiceAction.history": "실행 이력",
|
||||
"voiceAction.noHistory": "실행 이력이 없습니다",
|
||||
"voiceAction.blocked": "차단됨 (위험 명령)",
|
||||
"voiceAction.executed": "실행됨"
|
||||
"voiceAction.executed": "실행됨",
|
||||
"settings.theme.nord": "Nord",
|
||||
"settings.theme.solarized": "Solarized",
|
||||
"settings.theme.catppuccin": "Catppuccin",
|
||||
"settings.theme.dracula": "Dracula",
|
||||
"settings.sttLang.ko": "한국어",
|
||||
"settings.sttLang.en": "English",
|
||||
"settings.sttLang.ja": "日本語",
|
||||
"settings.sttLang.zh": "中文",
|
||||
"template.outputHelperText": "{{필드명}} 형식으로 플레이스홀더를 사용하세요",
|
||||
"nav.meeting": "회의",
|
||||
"meeting.title": "회의 모드",
|
||||
"meeting.newMeeting": "새 회의",
|
||||
"meeting.startRecording": "녹음 시작",
|
||||
"meeting.stopRecording": "녹음 종료",
|
||||
"meeting.recording": "녹음 중",
|
||||
"meeting.processing": "회의록 생성 중...",
|
||||
"meeting.completed": "완료",
|
||||
"meeting.error": "오류",
|
||||
"meeting.elapsed": "경과 시간",
|
||||
"meeting.memoPlaceholder": "메모 입력 (Enter로 추가)",
|
||||
"meeting.memoAdded": "메모 추가됨",
|
||||
"meeting.noSessions": "회의 녹음이 없습니다",
|
||||
"meeting.noSessionsDesc": "새 회의 버튼을 눌러 녹음을 시작하세요",
|
||||
"meeting.summary": "요약",
|
||||
"meeting.decisions": "결정사항",
|
||||
"meeting.actionItems": "할 일",
|
||||
"meeting.timeline": "타임라인",
|
||||
"meeting.transcript": "원문 전사",
|
||||
"meeting.memos": "메모",
|
||||
"meeting.exportPdf": "PDF 내보내기",
|
||||
"meeting.exportMarkdown": "마크다운 내보내기",
|
||||
"meeting.delete": "삭제",
|
||||
"meeting.deleteConfirm": "이 회의록을 삭제하시겠습니까?",
|
||||
"meeting.backToList": "목록으로",
|
||||
"meeting.notificationTitle": "회의록 준비 완료",
|
||||
"meeting.notificationBody": "회의록이 생성되었습니다. 클릭하여 확인하세요.",
|
||||
"meeting.sessions": "{{count}}건",
|
||||
"meeting.duration": "{{minutes}}분",
|
||||
"meeting.editTitle": "제목 편집",
|
||||
"meeting.untitled": "무제 회의",
|
||||
"meeting.processingStep.merging": "전사 텍스트 합산 중...",
|
||||
"meeting.processingStep.generating": "LLM 회의록 생성 중...",
|
||||
"meeting.processingStep.parsing": "회의록 파싱 중...",
|
||||
"meeting.processingStep.saving": "저장 중...",
|
||||
"meeting.processingStep.notifying": "완료 알림 중..."
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue