Phase 10~11 전체 구현: 킬러 피처 5종 + 수익화 시스템

Phase 10 킬러 피처:
- MemoService: 태그 CRUD + 마크다운 내보내기 (memo_tags DB)
- VoiceCommandService: 키워드→명령어 매칭, 프리셋 4종
- ScreenContextService: PowerShell 활성 윈도우 + Ctrl+C 선택 텍스트
- ChainService: LLM 명령어 순차 실행 파이프라인
- CaptionService: 6초 청크 연속 전사 + 시스템 오디오 루프백

VoiceModeService 파이프라인 통합:
- 녹음 시작 → 컨텍스트 캡처 → STT → 키워드 매칭 → LLM(체인/컨텍스트 주입) → 삽입

시스템 오디오 캡처:
- setDisplayMediaRequestHandler + audio: 'loopback' (IPC 브릿지)
- electron-audio-loopback 패키지 contextIsolation 호환 불가 → 직접 구현

Phase 11 수익화:
- LicenseService: Free/Pro/Pro+ 3티어, LemonSqueezy API
- Feature Gate: requireFeature/checkFeature/consumeFeature
- 일일 쿼터: Free dictation 20/일, LLM 10/일 (SQLite daily_usage)
- LicenseModal, ProBadge, UpgradePromptModal UI

디자인 보강:
- d3roTypo(13종), d3roShadow(10종), d3roRadius(7종) 토큰 시스템
- ScreenPanel, ButtonGroup DS 컴포넌트 신규
- PhosphorText 4→13종 변형, MetalDial conic-gradient 광택
- 공유 컴포넌트: EmptyStateCard, SearchInput, PageHeader, HistoryEntryCard

기타:
- 자막 핫키 SSOT 전체 연동 (Config→Hotkey→VoiceMode→Caption→Settings)
- StatusBar 자막 LED + 효과음, 자막 로딩 UI
- LLM 상태 이벤트 전파 수정 (폴링 제거 → onStatusChanged)
- 커맨드 팝업 "선택 해제" 항목 추가
This commit is contained in:
Yun Chan 2026-04-05 21:36:09 +09:00
parent 36d77ca224
commit a31f96bbb8
97 changed files with 11853 additions and 1143 deletions

208
src/renderer/i18n/vi.json Normal file
View file

@ -0,0 +1,208 @@
{
"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",
"dashboard.pressToRecord": "Nhấn {{key}} để bắt đầu ghi âm",
"dashboard.hotkeyNotSet": "Chưa đặt phím tắt",
"dashboard.words": "Từ",
"dashboard.total": "Tổng",
"dashboard.streak": "Chuỗi",
"dashboard.days": "ngày",
"dashboard.recording": "Đang ghi",
"dashboard.sessions": "Phiên",
"dashboard.today": "Hôm nay",
"dashboard.recentTranscriptions": "Phiên âm gần đây",
"dashboard.noHistory": "Chưa có lịch sử — nhấn phím tắt để bắt đầu ghi âm",
"dashboard.copy": "Sao chép",
"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",
"history.loading": "Đang tải...",
"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",
"dictionary.search": "Tìm kiếm...",
"dictionary.loading": "Đang tải...",
"dictionary.noResults": "Không tìm thấy kết quả",
"dictionary.noWords": "Chưa có từ — thêm từ tùy chỉnh để cải thiện độ chính xác STT",
"dictionary.used": "Đã dùng {{count}} lần",
"dictionary.editTitle": "Chỉnh sửa từ",
"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",
"commands.activeCommand": "Lệnh đang hoạt động",
"commands.none": "Không có",
"commands.loading": "Đang tải...",
"commands.noCommands": "Chưa có lệnh — nhấn Thêm để tạo",
"commands.editTitle": "Chỉnh sửa lệnh",
"commands.addTitle": "Thêm lệnh",
"commands.name": "Tên",
"commands.description": "Mô tả",
"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.",
"settings.agent": "Chế độ Agent",
"settings.agent.descWithKey": "Nhấn đúp {{key}} để vào chế độ Agent.",
"settings.agent.descNoKey": "Vui lòng đặt phím tắt chính tả trước.",
"settings.oneTouch": "Chế độ một chạm",
"settings.oneTouch.desc": "Nhấn để bắt đầu, nhấn lại để dừng. Cần phím tắt riêng.",
"settings.key": "Phím",
"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)",
"settings.textInsert": "Chèn văn bản",
"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)",
"settings.model.small": "small (244 MB, tốt)",
"settings.model.medium": "medium (769 MB, xuất sắc)",
"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).",
"settings.postProcess": "Hậu xử lý giọng nói",
"settings.defaultAction": "Lệnh hậu xử lý mặc định",
"settings.action.none": "Không có (văn bản gốc)",
"settings.action.refine": "Cải thiện (ngữ pháp + tự nhiên)",
"settings.action.translate": "Dịch",
"settings.action.summarize": "Tóm tắt",
"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",
"settings.about.voiceEngine": "Bộ máy giọng nói",
"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",
"onboarding.mic.title": "Cài đặt micrô",
"onboarding.mic.desc": "Chọn micrô bạn muốn dùng. Có thể thay đổi sau trong cài đặt.",
"onboarding.hotkey.title": "Cài đặt phím tắt",
"onboarding.hotkey.desc": "Đặt phím tắt chính tả. Giữ phím trong khi ghi âm.",
"onboarding.hotkey.notSet": "Phím tắt chưa được đặt",
"onboarding.hotkey.change": "Thay đổi phím tắt",
"onboarding.hotkey.set": "Đặt phím tắt",
"onboarding.ollama.title": "Cài đặt Ollama (tùy chọn)",
"onboarding.ollama.desc": "Cần Ollama để sử dụng hậu xử lý LLM (dịch, tóm tắt, v.v.). Chính tả giọng nói vẫn hoạt động mà không cần Ollama.",
"onboarding.ollama.download": "Tải Ollama",
"onboarding.ollama.modelHint": "Sau khi cài đặt, tải mô hình qua terminal",
"onboarding.done.title": "Thiết lập hoàn tất!",
"onboarding.done.descWithKey": "Giữ phím {{key}} và nói — giọng nói sẽ được chuyển thành văn bản.",
"onboarding.done.descNoKey": "Đặt phím tắt trong cài đặt để bắt đầu chính tả giọng nói.",
"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",
"hotkey.prompt": "Nhấn tổ hợp phím...",
"hotkey.ready": "✓ {{keys}} — hãy nhấn Lưu",
"hotkey.noKey": "Vui lòng nhập phím",
"hotkey.reserved": "{{keys}} là phím tắt hệ thống được dành riêng",
"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ộ.",
"ollama.step2.title": "BƯỚC 2 — Tải mô hình",
"ollama.step2.desc": "Tải mô hình bạn muốn qua terminal. Khuyến nghị:",
"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",
"service.audioInput": "AUDIO INPUT",
"service.ready": "READY",
"service.connected": "CONNECTED",
"service.offline": "OFFLINE",
"service.active": "ACTIVE",
"service.standby": "STANDBY",
"common.cancel": "Hủy",
"common.save": "Lưu",
"common.delete": "Xóa",
"common.add": "Thêm",
"common.edit": "Chỉnh sửa",
"common.close": "Đóng",
"common.confirm": "Xác nhận",
"common.loading": "Đang tải...",
"common.copy": "Sao chép",
"common.test": "Kiểm tra",
"common.stop": "Dừng",
"date.today": "Hôm nay",
"date.yesterday": "Hôm qua"
}