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/fr.json Normal file
View file

@ -0,0 +1,208 @@
{
"app.name": "D3RO Voice",
"app.tagline": "Assistant vocal IA local",
"nav.dashboard": "Tableau de bord",
"nav.history": "Historique",
"nav.dictionary": "Dictionnaire",
"nav.commands": "Commandes",
"nav.settings": "Paramètres",
"dashboard.sessionOverview": "Aperçu de session",
"dashboard.systemStatus": "État du système",
"dashboard.sessionsToday": "Sessions aujourd'hui",
"dashboard.pressToRecord": "Appuyez sur {{key}} pour commencer l'enregistrement",
"dashboard.hotkeyNotSet": "Raccourci non configuré",
"dashboard.words": "mots",
"dashboard.total": "total",
"dashboard.streak": "série",
"dashboard.days": "jours",
"dashboard.recording": "enregistrement",
"dashboard.sessions": "sessions",
"dashboard.today": "aujourd'hui",
"dashboard.recentTranscriptions": "Transcriptions récentes",
"dashboard.noHistory": "Aucun historique — appuyez sur le raccourci pour commencer à enregistrer",
"dashboard.copy": "Copier",
"dashboard.entries": "{{count}} entrées",
"dashboard.stat": "statistiques",
"dashboard.sys": "système",
"history.title": "Historique des transcriptions",
"history.search": "Rechercher...",
"history.entries": "{{count}} entrées",
"history.loading": "Chargement...",
"history.noResults": "Aucun résultat",
"history.noHistory": "Aucun historique — commencez à enregistrer",
"history.count": "{{count}} entrées",
"dictionary.title": "Dictionnaire personnalisé",
"dictionary.words": "{{count}} mots",
"dictionary.add": "Ajouter",
"dictionary.search": "Rechercher...",
"dictionary.loading": "Chargement...",
"dictionary.noResults": "Aucun résultat",
"dictionary.noWords": "Aucun mot — ajoutez des mots personnalisés pour améliorer la précision du STT",
"dictionary.used": "utilisé {{count}} fois",
"dictionary.editTitle": "Modifier le mot",
"dictionary.addTitle": "Ajouter un mot",
"dictionary.word": "Mot",
"dictionary.pronunciation": "Prononciation (facultatif)",
"commands.title": "Commandes LLM",
"commands.count": "{{count}} commandes",
"commands.add": "Ajouter",
"commands.activeCommand": "Commande active",
"commands.none": "Aucune",
"commands.loading": "Chargement...",
"commands.noCommands": "Aucune commande — cliquez sur ajouter pour en créer une",
"commands.editTitle": "Modifier la commande",
"commands.addTitle": "Ajouter une commande",
"commands.name": "Nom",
"commands.description": "Description",
"commands.promptTemplate": "Modèle de prompt",
"commands.promptHelp": "{{text}} sera remplacé par le texte transcrit",
"commands.defaultPrompt": "Veuillez améliorer {{text}}.",
"settings.title": "Paramètres",
"settings.tabs.general": "Général",
"settings.tabs.audio": "Audio",
"settings.tabs.stt": "STT",
"settings.tabs.llm": "LLM",
"settings.tabs.about": "À propos",
"settings.shortcuts": "Raccourcis",
"settings.dictation": "Dictée",
"settings.dictation.desc": "Maintenez enfoncé pour parler. La transcription démarre au relâchement.",
"settings.agent": "Mode agent",
"settings.agent.descWithKey": "Double-cliquez sur {{key}} pour entrer en mode agent.",
"settings.agent.descNoKey": "Configurez d'abord le raccourci de dictée.",
"settings.oneTouch": "Mode une touche",
"settings.oneTouch.desc": "Appuyez pour démarrer, appuyez à nouveau pour arrêter. Nécessite un raccourci distinct.",
"settings.key": "Touche",
"settings.notSet": "Non configuré",
"settings.enabled": "Activé",
"settings.disabled": "Désactivé",
"settings.interface": "Interface",
"settings.theme": "Thème",
"settings.theme.system": "Système",
"settings.theme.light": "Clair",
"settings.theme.dark": "Sombre",
"settings.language": "Langue",
"settings.appBehavior": "Comportement de l'application",
"settings.closeToTray": "Réduire dans la barre système",
"settings.autoLaunch": "Lancer au démarrage du système",
"settings.autoInsert": "Insérer le texte automatiquement après la transcription",
"settings.soundEffects": "Effets sonores",
"settings.microphone": "Microphone",
"settings.inputDevice": "Périphérique d'entrée",
"settings.deviceDefault": "(par défaut)",
"settings.textInsert": "Insertion de texte",
"settings.insertMethod": "Méthode d'insertion",
"settings.insertClipboard": "Presse-papiers (Ctrl+V)",
"settings.insertKeyboard": "Frappe au clavier",
"settings.whisperModel": "Modèle Whisper",
"settings.model.tiny": "tiny (39 Mo, le plus rapide)",
"settings.model.base": "base (74 Mo, équilibré)",
"settings.model.small": "small (244 Mo, bon)",
"settings.model.medium": "medium (769 Mo, très bon)",
"settings.model.large": "large-v3 (1,5 Go, meilleur)",
"settings.sttLanguage": "Langue de reconnaissance",
"settings.sttLang.auto": "Détection automatique",
"settings.ollamaServer": "Serveur Ollama",
"settings.ollamaUrl": "URL du serveur Ollama",
"settings.ollamaHint": "D3RO Voice se connecte automatiquement quand Ollama est en cours d'exécution. Téléchargez les modèles directement depuis Ollama (ex : ollama pull qwen3:4b).",
"settings.postProcess": "Post-traitement vocal",
"settings.defaultAction": "Action de post-traitement par défaut",
"settings.action.none": "Aucune (texte original inchangé)",
"settings.action.refine": "Affiner (grammaire + naturel)",
"settings.action.translate": "Traduire",
"settings.action.summarize": "Résumer",
"settings.action.grammar": "Correction grammaticale",
"settings.action.custom": "Prompt personnalisé",
"settings.actionHint": "Le post-traitement LLM sélectionné est appliqué au texte transcrit après l'enregistrement avec le raccourci. Ne fonctionne que lorsque Ollama est connecté.",
"settings.about.version": "Version",
"settings.about.techStack": "Stack technologique",
"settings.about.techStackValue": "Electron + React 19 + MUI 7 + TypeScript",
"settings.about.voiceEngine": "Moteur vocal",
"settings.about.voiceEngineValue": "STT : faster-whisper (local) / LLM : Ollama (local)",
"settings.about.description": "Assistant vocal IA entièrement local, basé sur l'ingénierie inverse de Speakly. Fonctionne sans dépendance au cloud.",
"settings.about.restartOnboarding": "Revoir le guide de configuration initiale",
"status.ollama": "OLLAMA",
"status.offline": "HORS LIGNE",
"status.nudge.title": "Ollama n'est pas en cours d'exécution",
"status.nudge.desc": "Ollama est nécessaire pour le post-traitement LLM (traduction, résumé, etc.).",
"status.nudge.guide": "Voir le guide d'installation →",
"onboarding.welcome.title": "D3RO-VOICE",
"onboarding.welcome.desc": "Sans taper, par la voix. Votre assistant vocal IA local.",
"onboarding.welcome.start": "Commencer",
"onboarding.mic.title": "Configuration du microphone",
"onboarding.mic.desc": "Sélectionnez le microphone que vous souhaitez utiliser. Vous pourrez le modifier plus tard dans les paramètres.",
"onboarding.hotkey.title": "Configuration du raccourci",
"onboarding.hotkey.desc": "Configurez le raccourci de dictée. L'enregistrement dure tant que vous maintenez la touche enfoncée.",
"onboarding.hotkey.notSet": "Aucun raccourci configuré",
"onboarding.hotkey.change": "Modifier le raccourci",
"onboarding.hotkey.set": "Configurer le raccourci",
"onboarding.ollama.title": "Installer Ollama (facultatif)",
"onboarding.ollama.desc": "Ollama est nécessaire pour le post-traitement LLM comme la traduction ou le résumé. La dictée vocale fonctionne sans Ollama.",
"onboarding.ollama.download": "Télécharger Ollama",
"onboarding.ollama.modelHint": "Après l'installation, téléchargez un modèle depuis le terminal",
"onboarding.done.title": "Configuration terminée !",
"onboarding.done.descWithKey": "Maintenez {{key}} enfoncé et parlez pour convertir votre voix en texte.",
"onboarding.done.descNoKey": "Configurez un raccourci dans les paramètres pour commencer la dictée.",
"onboarding.done.start": "Commencer",
"onboarding.back": "Retour",
"onboarding.next": "Suivant",
"hotkey.title": "Configurer le raccourci",
"hotkey.dictationTitle": "Configurer le raccourci de dictée",
"hotkey.oneTouchTitle": "Configurer le raccourci du mode une touche",
"hotkey.prompt": "Appuyez sur une combinaison de touches...",
"hotkey.ready": "✓ {{keys}} — appuyez sur enregistrer",
"hotkey.noKey": "Veuillez saisir une touche",
"hotkey.reserved": "{{keys}} est un raccourci réservé par le système",
"hotkey.current": "Actuel : {{keys}}",
"hotkey.hint": "Saisissez une combinaison (ex : Ctrl+Shift+Q) ou une touche seule (ex : F5)",
"hotkey.reset": "Ressaisir",
"ollama.title": "GUIDE DE CONFIGURATION OLLAMA",
"ollama.step1.title": "ÉTAPE 1 — Installer Ollama",
"ollama.step1.desc": "Ollama est un outil gratuit pour exécuter des LLM en local.",
"ollama.step2.title": "ÉTAPE 2 — Télécharger un modèle",
"ollama.step2.desc": "Exécutez la commande suivante dans le terminal pour télécharger le modèle recommandé :",
"ollama.step2.alt": "Ou un modèle plus grand : ollama pull qwen3:8b (plus précis, plus lent)",
"ollama.step3.title": "ÉTAPE 3 — Connexion automatique",
"ollama.step3.desc": "D3RO-VOICE détecte automatiquement quand Ollama est en cours d'exécution. Quand la LED de la barre d'état passe du rouge au vert, c'est prêt !",
"service.sttEngine": "MOTEUR STT",
"service.ollamaLlm": "OLLAMA LLM",
"service.hotkeyHook": "RACCOURCI CLAVIER",
"service.audioInput": "ENTRÉE AUDIO",
"service.ready": "PRÊT",
"service.connected": "CONNECTÉ",
"service.offline": "HORS LIGNE",
"service.active": "ACTIF",
"service.standby": "EN VEILLE",
"common.cancel": "Annuler",
"common.save": "Enregistrer",
"common.delete": "Supprimer",
"common.add": "Ajouter",
"common.edit": "Modifier",
"common.close": "Fermer",
"common.confirm": "Confirmer",
"common.loading": "Chargement...",
"common.copy": "Copier",
"common.test": "Tester",
"common.stop": "Arrêter",
"date.today": "Aujourd'hui",
"date.yesterday": "Hier"
}