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": "Trợ lý giọng nói AI cục bộ",
"nav.dashboard": "Bảng điều khiển",
"nav.history": "Lịch sử",
"nav.dictionary": "Từ điển",
"nav.commands": "Lệnh",
"nav.settings": "Cài đặt",
"dashboard.sessionOverview": "Tổng quan phiên",
"dashboard.systemStatus": "Trạng thái hệ thống",
"dashboard.sessionsToday": "Phiên hôm nay",
@ -26,7 +24,6 @@
"dashboard.entries": "{{count}} mục",
"dashboard.stat": "Thống kê",
"dashboard.sys": "Hệ thống",
"history.title": "Lịch sử phiên âm",
"history.search": "Tìm kiếm...",
"history.entries": "{{count}} mục",
@ -34,7 +31,6 @@
"history.noResults": "Không tìm thấy kết quả",
"history.noHistory": "Chưa có lịch sử — hãy bắt đầu ghi âm",
"history.count": "{{count}} mục",
"dictionary.title": "Từ điển tùy chỉnh",
"dictionary.words": "{{count}} từ",
"dictionary.add": "Thêm",
@ -47,7 +43,6 @@
"dictionary.addTitle": "Thêm từ",
"dictionary.word": "Từ",
"dictionary.pronunciation": "Phát âm (tùy chọn)",
"commands.title": "Lệnh LLM",
"commands.count": "{{count}} lệnh",
"commands.add": "Thêm",
@ -62,14 +57,12 @@
"commands.promptTemplate": "Mẫu prompt",
"commands.promptHelp": "{{text}} sẽ được thay thế bằng văn bản phiên âm",
"commands.defaultPrompt": "Vui lòng cải thiện {{text}}.",
"settings.title": "Cài đặt",
"settings.tabs.general": "Chung",
"settings.tabs.audio": "Âm thanh",
"settings.tabs.stt": "STT",
"settings.tabs.llm": "LLM",
"settings.tabs.about": "Giới thiệu",
"settings.shortcuts": "Phím tắt",
"settings.dictation": "Chính tả",
"settings.dictation.desc": "Giữ phím và nói. Thả phím để bắt đầu phiên âm.",
@ -82,20 +75,17 @@
"settings.notSet": "Chưa đặt",
"settings.enabled": "Đã bật",
"settings.disabled": "Đã tắt",
"settings.interface": "Giao diện",
"settings.theme": "Giao diện",
"settings.theme.system": "Hệ thống",
"settings.theme.light": "Sáng",
"settings.theme.dark": "Tối",
"settings.language": "Ngôn ngữ",
"settings.appBehavior": "Hành vi ứng dụng",
"settings.closeToTray": "Thu nhỏ xuống khay hệ thống",
"settings.autoLaunch": "Tự động khởi động cùng hệ thống",
"settings.autoInsert": "Tự động chèn văn bản sau khi phiên âm",
"settings.soundEffects": "Hiệu ứng âm thanh",
"settings.microphone": "Micrô",
"settings.inputDevice": "Thiết bị đầu vào",
"settings.deviceDefault": "(Mặc định)",
@ -103,7 +93,6 @@
"settings.insertMethod": "Phương thức chèn",
"settings.insertClipboard": "Bộ nhớ tạm (Ctrl+V)",
"settings.insertKeyboard": "Giả lập bàn phím",
"settings.whisperModel": "Mô hình Whisper",
"settings.model.tiny": "tiny (39 MB, nhanh nhất)",
"settings.model.base": "base (74 MB, cân bằng)",
@ -112,7 +101,6 @@
"settings.model.large": "large-v3 (1.5 GB, tốt nhất)",
"settings.sttLanguage": "Ngôn ngữ nhận dạng",
"settings.sttLang.auto": "Tự động phát hiện",
"settings.ollamaServer": "Máy chủ Ollama",
"settings.ollamaUrl": "URL máy chủ Ollama",
"settings.ollamaHint": "Nếu Ollama đang chạy, kết nối sẽ tự động. Tải mô hình trực tiếp từ Ollama (ví dụ: ollama pull qwen3:4b).",
@ -125,7 +113,6 @@
"settings.action.grammar": "Sửa ngữ pháp",
"settings.action.custom": "Prompt tùy chỉnh",
"settings.actionHint": "Hậu xử lý LLM đã chọn sẽ được áp dụng cho văn bản phiên âm sau khi ghi âm. Chỉ hoạt động khi Ollama được kết nối.",
"settings.about.version": "Phiên bản",
"settings.about.techStack": "Ngăn xếp công nghệ",
"settings.about.techStackValue": "Electron + React 19 + MUI 7 + TypeScript",
@ -133,13 +120,11 @@
"settings.about.voiceEngineValue": "STT: faster-whisper (cục bộ) / LLM: Ollama (cục bộ)",
"settings.about.description": "Trợ lý giọng nói AI cục bộ dựa trên kỹ thuật dịch ngược Speakly. Hoạt động hoàn toàn cục bộ, không phụ thuộc vào dịch vụ đám mây.",
"settings.about.restartOnboarding": "Xem lại hướng dẫn cài đặt ban đầu",
"status.ollama": "OLLAMA",
"status.offline": "OFFLINE",
"status.nudge.title": "Ollama chưa chạy",
"status.nudge.desc": "Cần Ollama để sử dụng hậu xử lý LLM (dịch, tóm tắt, v.v.).",
"status.nudge.guide": "Xem hướng dẫn cài đặt →",
"onboarding.welcome.title": "D3RO-VOICE",
"onboarding.welcome.desc": "Không cần gõ phím — chỉ cần nói. Trợ lý giọng nói AI cục bộ.",
"onboarding.welcome.start": "Bắt đầu",
@ -160,7 +145,6 @@
"onboarding.done.start": "Bắt đầu",
"onboarding.back": "Quay lại",
"onboarding.next": "Tiếp theo",
"hotkey.title": "Cài đặt phím tắt",
"hotkey.dictationTitle": "Đặt phím tắt chính tả",
"hotkey.oneTouchTitle": "Đặt phím tắt chế độ một chạm",
@ -171,7 +155,6 @@
"hotkey.current": "Hiện tại: {{keys}}",
"hotkey.hint": "Nhập tổ hợp phím (ví dụ: Ctrl+Shift+Q) hoặc phím đơn (ví dụ: F5)",
"hotkey.reset": "Nhập lại",
"ollama.title": "OLLAMA SETUP GUIDE",
"ollama.step1.title": "BƯỚC 1 — Cài đặt Ollama",
"ollama.step1.desc": "Ollama là công cụ miễn phí để chạy LLM cục bộ.",
@ -180,7 +163,6 @@
"ollama.step2.alt": "Hoặc mô hình lớn hơn: ollama pull qwen3:8b (chính xác hơn, chậm hơn)",
"ollama.step3.title": "BƯỚC 3 — Tự động kết nối",
"ollama.step3.desc": "Khi Ollama chạy, D3RO-VOICE sẽ tự động phát hiện. Khi đèn LED trên thanh trạng thái chuyển từ đỏ sang xanh — đã sẵn sàng!",
"service.sttEngine": "STT ENGINE",
"service.ollamaLlm": "OLLAMA LLM",
"service.hotkeyHook": "HOTKEY HOOK",
@ -190,7 +172,6 @@
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"common.cancel": "Hủy",
"common.save": "Lưu",
"common.delete": "Xóa",
@ -202,7 +183,51 @@
"common.copy": "Sao chép",
"common.test": "Kiểm tra",
"common.stop": "Dừng",
"date.today": "Hôm nay",
"date.yesterday": "Hôm qua"
"date.yesterday": "Hôm qua",
"settings.theme.nord": "Nord",
"settings.theme.solarized": "Solarized",
"settings.theme.catppuccin": "Catppuccin",
"settings.theme.dracula": "Dracula",
"settings.sttLang.ko": "Tiếng Hàn",
"settings.sttLang.en": "Tiếng Anh",
"settings.sttLang.ja": "Tiếng Nhật",
"settings.sttLang.zh": "Tiếng Trung",
"template.outputHelperText": "Sử dụng {{tênTrường}} cho trình giữ chỗ",
"nav.meeting": "Cuộc họp",
"meeting.title": "Chế độ Cuộc họp",
"meeting.newMeeting": "Cuộc họp mới",
"meeting.startRecording": "Bắt đầu ghi âm",
"meeting.stopRecording": "Dừng ghi âm",
"meeting.recording": "Đang ghi âm",
"meeting.processing": "Đang tạo biên bản...",
"meeting.completed": "Hoàn thành",
"meeting.error": "Lỗi",
"meeting.elapsed": "Thời gian đã qua",
"meeting.memoPlaceholder": "Nhập ghi chú (Enter để thêm)",
"meeting.memoAdded": "Đã thêm ghi chú",
"meeting.noSessions": "Không có bản ghi cuộc họp",
"meeting.noSessionsDesc": "Nhấn «Cuộc họp mới» để bắt đầu ghi âm",
"meeting.summary": "Tóm tắt",
"meeting.decisions": "Quyết định",
"meeting.actionItems": "Hành động cần thực hiện",
"meeting.timeline": "Dòng thời gian",
"meeting.transcript": "Bản ghi thô",
"meeting.memos": "Ghi chú",
"meeting.exportPdf": "Xuất PDF",
"meeting.exportMarkdown": "Xuất Markdown",
"meeting.delete": "Xóa",
"meeting.deleteConfirm": "Xóa bản ghi cuộc họp này?",
"meeting.backToList": "Quay lại danh sách",
"meeting.notificationTitle": "Biên bản đã sẵn sàng",
"meeting.notificationBody": "Biên bản cuộc họp đã được tạo.",
"meeting.sessions": "{{count}} phiên",
"meeting.duration": "{{minutes}} phút",
"meeting.editTitle": "Chỉnh sửa tiêu đề",
"meeting.untitled": "Cuộc họp không có tiêu đề",
"meeting.processingStep.merging": "Đang ghép bản ghi...",
"meeting.processingStep.generating": "Đang tạo biên bản với LLM...",
"meeting.processingStep.parsing": "Đang phân tích biên bản...",
"meeting.processingStep.saving": "Đang lưu...",
"meeting.processingStep.notifying": "Đang gửi thông báo..."
}