d3ro-voice/src/renderer/i18n/en.json
Yun Chan f0e221058d fix: /simplify 리뷰 — UX/코드 품질 10건 수정
- EditableSegment: readOnly prop 추가, hover 배경색 효과
- MeetingDetailTabs: useMemo(parseSegments), 이중 debounce 제거, cleanup
- MeetingChatPanel: sessionId deps, 에러 표시, key=timestamp
- ExportMenu: i18n 위반 수정 (하드코딩 → t())
- MeetingModePage: 에러 Snackbar 피드백 (startRecording, viewDetail)
- TranscriptTab: polish 실패 피드백
- 12개 locale i18n 키 5개 추가
2026-04-08 11:34:50 +09:00

475 lines
22 KiB
JSON

{
"app.name": "D3RO Voice",
"app.tagline": "Local AI Voice Assistant",
"nav.dashboard": "Dashboard",
"nav.history": "History",
"nav.dictionary": "Dictionary",
"nav.commands": "Commands",
"nav.settings": "Settings",
"dashboard.sessionOverview": "Session Overview",
"dashboard.systemStatus": "System Status",
"dashboard.sessionsToday": "Today's Sessions",
"dashboard.pressToRecord": "Press {{key}} to start recording",
"dashboard.hotkeyNotSet": "Hotkey not set",
"dashboard.words": "Words",
"dashboard.total": "Total",
"dashboard.streak": "Streak",
"dashboard.days": "days",
"dashboard.recording": "Recording",
"dashboard.sessions": "Sessions",
"dashboard.today": "Today",
"dashboard.recentTranscriptions": "Recent Transcriptions",
"dashboard.noHistory": "No history — press your hotkey to start recording",
"dashboard.copy": "Copy",
"dashboard.entries": "{{count}} entries",
"dashboard.stat": "Stats",
"dashboard.sys": "System",
"history.title": "Transcription History",
"history.search": "Search...",
"history.entries": "{{count}} entries",
"history.loading": "Loading...",
"history.noResults": "No results found",
"history.noHistory": "No history — start recording",
"history.count": "{{count}} entries",
"dictionary.title": "Custom Dictionary",
"dictionary.words": "{{count}} words",
"dictionary.add": "Add",
"dictionary.search": "Search...",
"dictionary.loading": "Loading...",
"dictionary.noResults": "No results found",
"dictionary.noWords": "No words — add custom words to improve STT accuracy",
"dictionary.used": "Used {{count}} times",
"dictionary.editTitle": "Edit Word",
"dictionary.addTitle": "Add Word",
"dictionary.word": "Word",
"dictionary.pronunciation": "Pronunciation (optional)",
"commands.title": "LLM Commands",
"commands.count": "{{count}} commands",
"commands.add": "Add",
"commands.activeCommand": "Active Command",
"commands.none": "None",
"commands.loading": "Loading...",
"commands.noCommands": "No commands — click Add to create one",
"commands.editTitle": "Edit Command",
"commands.addTitle": "Add Command",
"commands.name": "Name",
"commands.description": "Description",
"commands.promptTemplate": "Prompt Template",
"commands.promptHelp": "{{text}} will be replaced with the transcribed text",
"commands.defaultPrompt": "Please refine the following: {{text}}",
"settings.title": "Settings",
"settings.tabs.general": "General",
"settings.tabs.audio": "Audio",
"settings.tabs.stt": "STT",
"settings.tabs.llm": "LLM",
"settings.tabs.about": "About",
"settings.shortcuts": "Shortcuts",
"settings.dictation": "Dictation",
"settings.dictation.desc": "Hold to speak. Transcription begins when you release the key.",
"settings.agent": "Agent Mode",
"settings.agent.descWithKey": "Double-press {{key}} to enter Agent mode.",
"settings.agent.descNoKey": "Set a dictation hotkey first.",
"settings.oneTouch": "One-Touch Mode",
"settings.oneTouch.desc": "Press to start, press again to stop. Requires a separate shortcut.",
"settings.caption": "Live Caption",
"settings.caption.desc": "Toggle live caption mode with hotkey. Transcribes microphone input in real-time.",
"settings.captionAudio": "Caption Audio Source",
"settings.captionSource": "Audio Source",
"settings.captionSource.mic": "Microphone only",
"settings.captionSource.system": "System audio only (desktop sound)",
"settings.captionSource.both": "Microphone + System audio",
"settings.key": "Key",
"settings.notSet": "Not set",
"settings.enabled": "Enabled",
"settings.disabled": "Disabled",
"settings.interface": "Interface",
"settings.theme": "Theme",
"settings.theme.system": "System",
"settings.theme.light": "Light",
"settings.theme.dark": "Dark",
"settings.language": "Language",
"settings.appBehavior": "App Behavior",
"settings.closeToTray": "Minimize to tray on close",
"settings.autoLaunch": "Launch at system startup",
"settings.autoInsert": "Auto-insert text after transcription",
"settings.soundEffects": "Sound Effects",
"settings.microphone": "Microphone",
"settings.inputDevice": "Input Device",
"settings.deviceDefault": "(Default)",
"settings.textInsert": "Text Insertion",
"settings.insertMethod": "Insert Method",
"settings.insertClipboard": "Clipboard (Ctrl+V)",
"settings.insertKeyboard": "Keyboard Typing",
"settings.whisperModel": "Whisper Model",
"settings.model.tiny": "tiny (39 MB, fastest)",
"settings.model.base": "base (74 MB, balanced)",
"settings.model.small": "small (244 MB, good)",
"settings.model.medium": "medium (769 MB, great)",
"settings.model.large": "large-v3 (1.5 GB, best)",
"settings.sttLanguage": "Recognition Language",
"settings.sttLang.auto": "Auto-detect",
"settings.ollamaServer": "Ollama Server",
"settings.ollamaUrl": "Ollama Server URL",
"settings.ollamaHint": "Connects automatically when Ollama is running. Pull models directly in Ollama (e.g. ollama pull qwen3:4b).",
"settings.llmModel": "LLM Model",
"settings.postProcess": "Voice Post-Processing",
"settings.defaultAction": "Default Post-Processing Command",
"settings.action.none": "None (raw transcription)",
"settings.action.refine": "Refine (grammar + fluency)",
"settings.action.translate": "Translate",
"settings.action.summarize": "Summarize",
"settings.action.grammar": "Grammar Correction",
"settings.action.custom": "Custom Prompt",
"settings.actionHint": "The selected LLM post-processing will be applied to your transcription after recording. Only works when Ollama is connected.",
"settings.about.version": "Version",
"settings.about.techStack": "Tech Stack",
"settings.about.techStackValue": "Electron + React 19 + MUI 7 + TypeScript",
"settings.about.voiceEngine": "Voice Engine",
"settings.about.voiceEngineValue": "STT: faster-whisper (local) / LLM: Ollama (local)",
"settings.about.description": "A fully local AI voice assistant built on Speakly reverse-engineering insights. Runs entirely offline with no cloud dependencies.",
"settings.about.restartOnboarding": "Restart Setup Wizard",
"status.ollama": "OLLAMA",
"status.offline": "OFFLINE",
"status.nudge.title": "Ollama is not running",
"status.nudge.desc": "Ollama is required for LLM post-processing (translation, summarization, etc.).",
"status.nudge.guide": "View setup guide →",
"onboarding.welcome.title": "D3RO-VOICE",
"onboarding.welcome.desc": "No typing needed — just speak. Your local AI voice assistant.",
"onboarding.welcome.start": "Get Started",
"onboarding.mic.title": "Microphone Setup",
"onboarding.mic.desc": "Choose a microphone to use. You can change this later in Settings.",
"onboarding.hotkey.title": "Shortcut Setup",
"onboarding.hotkey.desc": "Set your dictation shortcut. Hold the key while speaking to record.",
"onboarding.hotkey.notSet": "No shortcut set",
"onboarding.hotkey.change": "Change Shortcut",
"onboarding.hotkey.set": "Set Shortcut",
"onboarding.ollama.title": "Install Ollama (Optional)",
"onboarding.ollama.desc": "Ollama is required for LLM post-processing like translation and summarization. Voice dictation works without it.",
"onboarding.ollama.download": "Download Ollama",
"onboarding.ollama.modelHint": "After installation, download a model from your terminal",
"onboarding.done.title": "You're all set!",
"onboarding.done.descWithKey": "Hold {{key}} and speak — your voice will be converted to text.",
"onboarding.done.descNoKey": "Set a shortcut in Settings to start voice dictation.",
"onboarding.done.start": "Start Using",
"onboarding.back": "Back",
"onboarding.next": "Next",
"hotkey.title": "Set Shortcut",
"hotkey.dictationTitle": "Set Dictation Shortcut",
"hotkey.oneTouchTitle": "Set One-Touch Mode Shortcut",
"hotkey.captionTitle": "Set Live Caption Shortcut",
"hotkey.prompt": "Press a key combination...",
"hotkey.ready": "✓ {{keys}} — press Save to confirm",
"hotkey.noKey": "Please press a key",
"hotkey.reserved": "{{keys}} is a reserved system shortcut",
"hotkey.current": "Current: {{keys}}",
"hotkey.hint": "Enter a combination (e.g. Ctrl+Shift+Q) or a single key (e.g. F5)",
"hotkey.reset": "Clear",
"ollama.title": "OLLAMA SETUP GUIDE",
"ollama.step1.title": "STEP 1 — Install Ollama",
"ollama.step1.desc": "Ollama is a free tool for running LLMs locally.",
"ollama.step2.title": "STEP 2 — Download a Model",
"ollama.step2.desc": "Pull a model from your terminal. Recommended:",
"ollama.step2.alt": "Or a larger model: ollama pull qwen3:8b (more accurate, slower)",
"ollama.step3.title": "STEP 3 — Auto-Connect",
"ollama.step3.desc": "Once Ollama is running, D3RO-VOICE will detect it automatically. When the status bar LED turns from red to green, you're ready!",
"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": "Cancel",
"common.save": "Save",
"common.delete": "Delete",
"common.add": "Add",
"common.edit": "Edit",
"common.close": "Close",
"common.confirm": "Confirm",
"common.loading": "Loading...",
"common.copy": "Copy",
"common.test": "Test",
"common.stop": "Stop",
"memo.tags": "Tags",
"memo.addTag": "Add Tag",
"memo.removeTag": "Remove Tag",
"memo.tagPlaceholder": "Type a tag and press Enter",
"memo.noTags": "No tags",
"memo.export": "Export as Markdown",
"memo.exportSuccess": "Export complete",
"memo.filterByTag": "Filter by tag",
"memo.allTags": "All Tags",
"memo.clearFilter": "Clear filter",
"voiceCommand.title": "Voice Commands",
"voiceCommand.enabled": "Voice Keyword Recognition",
"voiceCommand.enabledDesc": "Detects keywords at the start of transcription to auto-select commands.",
"voiceCommand.keywords": "Keywords",
"voiceCommand.keywordPlaceholder": "Type keyword and press Enter",
"voiceCommand.noKeywords": "No keywords",
"voiceCommand.matchMode": "Match Mode",
"voiceCommand.matchMode.prefix": "Starts with",
"voiceCommand.matchMode.suffix": "Ends with",
"voiceCommand.matchMode.contains": "Contains",
"chain.title": "LLM Chains",
"chain.count": "{{count}} chains",
"chain.add": "Add Chain",
"chain.editTitle": "Edit Chain",
"chain.addTitle": "Add Chain",
"chain.name": "Chain Name",
"chain.steps": "Steps",
"chain.addStep": "Add Step",
"chain.removeStep": "Remove",
"chain.inputSource": "Input Source",
"chain.inputSource.original": "Original Text",
"chain.inputSource.previous": "Previous Step Result",
"chain.selectInstruction": "Select Command",
"chain.execute": "Execute",
"chain.executing": "Executing...",
"chain.noChains": "No chains — create a pipeline to run multiple commands in sequence",
"chain.step": "Step {{n}}",
"chain.progress": "Processing step {{current}}/{{total}}",
"context.title": "Screen Context",
"context.enabled": "Screen Context",
"context.enabledDesc": "Captures active app and selected text when recording starts, and sends it to the LLM.",
"dashboard.caption": "Live Caption",
"dashboard.captionStart": "Start Caption",
"dashboard.captionStop": "Stop Caption",
"dashboard.captionActive": "Caption Active",
"settings.voiceCommands": "Voice Commands",
"settings.voiceCommands.desc": "Detects keywords in transcription to auto-select commands.",
"settings.screenContext": "Screen Context",
"settings.screenContext.desc": "Sends active app info and selected text to the LLM during recording.",
"date.today": "Today",
"date.yesterday": "Yesterday",
"license.title": "License",
"license.currentTier": "Current Tier",
"license.free": "FREE",
"license.pro": "PRO",
"license.proPlus": "PRO+",
"license.activate": "Activate License",
"license.deactivate": "Deactivate",
"license.keyPlaceholder": "Enter license key...",
"license.activating": "Activating...",
"license.activated": "Activated",
"license.activateError": "Activation failed: {{message}}",
"license.deactivated": "Deactivated",
"license.machineId": "Machine ID",
"license.activatedAt": "Activated At",
"license.manageLicense": "Manage License",
"license.upgrade": "Upgrade",
"license.upgradeTitle": "Upgrade to Pro",
"license.upgradeDesc": "Unlock all features",
"license.quotaUsed": "{{used}}/{{limit}} used",
"license.quotaUnlimited": "Unlimited",
"license.tierComparison": "Tier Comparison",
"license.dailyUsage": "Daily Usage",
"license.feature.dictation": "Dictation",
"license.feature.llm_process": "LLM Processing",
"license.feature.live_caption": "Live Caption",
"license.feature.screen_context": "Screen Context",
"license.feature.voice_command": "Voice Commands",
"license.feature.llm_chain": "LLM Chain",
"license.feature.voice_memo": "Voice Memo",
"license.feature.history_unlimited": "Unlimited History",
"license.feature.history_export": "History Export",
"license.feature.custom_instruction_create": "Custom Instruction",
"license.feature.file_transcription": "File Transcription",
"license.feature.voice_conversation": "Voice Conversation",
"license.feature.dictation_template": "Dictation Template",
"license.feature.meeting_summary": "Meeting Summary",
"license.feature.local_rag": "Local RAG",
"license.feature.os_automation": "OS Automation",
"license.feature.llmProcess": "LLM Processing",
"license.feature.liveCaption": "Live Caption",
"license.feature.screenContext": "Screen Context",
"license.feature.voiceCommand": "Voice Commands",
"license.feature.llmChain": "LLM Chain",
"license.feature.voiceMemo": "Voice Memo",
"license.feature.historyUnlimited": "Unlimited History",
"license.feature.historyExport": "History Export",
"license.feature.customInstruction": "Custom Instruction",
"license.feature.fileTranscription": "File Transcription",
"license.feature.voiceConversation": "Voice Conversation",
"license.feature.dictationTemplate": "Dictation Template",
"license.feature.meetingSummary": "Meeting Summary",
"license.feature.localRag": "Local RAG",
"license.feature.osAutomation": "OS Automation",
"license.pro.required": "PRO Required",
"license.proPlus.required": "PRO+ Required",
"license.included": "Included",
"license.notIncluded": "Not included",
"license.keyLabel": "License Key",
"license.quotaExceeded.title": "You've used all your daily {{feature}}",
"license.quotaExceeded.desc": "Upgrade to Pro for unlimited usage",
"license.tierRequired.title": "{{feature}} is a {{tier}} feature",
"license.tierRequired.desc": "Upgrade to {{tier}} to unlock",
"license.tryTomorrow": "Try again tomorrow",
"license.learnMore": "Learn more",
"license.upgradeBenefits": "Upgrade Benefits",
"license.benefit.unlimitedDictation": "Unlimited dictation",
"license.benefit.unlimitedLLM": "Unlimited AI polish",
"license.benefit.liveCaption": "Live captions",
"license.benefit.unlimitedHistory": "Unlimited history retention",
"license.usageToday": "Usage today",
"license.perDay": "/day",
"license.unlimited": "Unlimited",
"license.locked": "Locked",
"license.nav": "License",
"fileTranscription.title": "File Transcription",
"fileTranscription.dropZone": "Drop audio/video file here",
"fileTranscription.dropZoneHint": "Supports MP3, WAV, M4A, MP4, MKV, WEBM",
"fileTranscription.converting": "Converting...",
"fileTranscription.processing": "Transcribing...",
"fileTranscription.progress": "Chunk {{current}} / {{total}}",
"fileTranscription.complete": "Transcription complete",
"fileTranscription.copyAll": "Copy All",
"fileTranscription.cancel": "Cancel",
"fileTranscription.retry": "Retry",
"fileTranscription.error.invalidFormat": "Unsupported file format",
"fileTranscription.error.unknown": "Unknown error",
"meetingSummary.title": "Meeting Summary",
"meetingSummary.generating": "Generating summary...",
"meetingSummary.summary": "Summary",
"meetingSummary.decisions": "Key Decisions",
"meetingSummary.actionItems": "Action Items",
"meetingSummary.exportMarkdown": "Export as Markdown",
"meetingSummary.noSummary": "No summary available",
"meetingSummary.generate": "Generate Summary",
"template.title": "Dictation Templates",
"template.create": "New Template",
"template.edit": "Edit Template",
"template.delete": "Delete",
"template.name": "Template Name",
"template.description": "Description",
"template.fields": "Fields",
"template.addField": "Add Field",
"template.fieldName": "Field Name",
"template.fieldLabel": "Label",
"template.fieldPrompt": "Voice Prompt",
"template.outputFormat": "Output Format",
"template.startSession": "Start",
"template.cancelSession": "Cancel Session",
"template.empty": "No templates",
"nav.conversation": "Talk",
"conversation.title": "Voice Conversation",
"conversation.idle": "Idle",
"conversation.listening": "Listening",
"conversation.thinking": "Thinking",
"conversation.speaking": "Speaking",
"conversation.empty": "Talk to D3RO",
"conversation.emptyHint": "Press the mic button or type a message",
"conversation.inputPlaceholder": "Type a message...",
"conversation.end": "End",
"conversation.clearHistory": "Clear history",
"nav.knowledge": "Knowledge",
"rag.title": "Knowledge Base",
"rag.addDocument": "Add Document",
"rag.documents": "Documents",
"rag.noDocuments": "No documents",
"rag.chunks": "chunks",
"rag.indexed": "Indexed",
"rag.pending": "Pending",
"rag.indexing": "Indexing",
"rag.reindex": "Reindex",
"rag.askQuestion": "Ask a Question",
"rag.queryPlaceholder": "Ask about your documents...",
"rag.searching": "Searching...",
"rag.sources": "Sources",
"rag.adding": "Adding...",
"rag.parsing": "Parsing document...",
"voiceAction.title": "Voice Actions",
"voiceAction.execute": "Execute",
"voiceAction.presets": "Preset Commands",
"voiceAction.history": "Action History",
"voiceAction.noHistory": "No action history",
"voiceAction.blocked": "Blocked (unsafe)",
"voiceAction.executed": "Executed",
"settings.theme.nord": "Nord",
"settings.theme.solarized": "Solarized",
"settings.theme.catppuccin": "Catppuccin",
"settings.theme.dracula": "Dracula",
"settings.sttLang.ko": "한국어 (Korean)",
"settings.sttLang.en": "English",
"settings.sttLang.ja": "日本語 (Japanese)",
"settings.sttLang.zh": "中文 (Chinese)",
"template.outputHelperText": "Use {{fieldName}} for placeholders",
"nav.meeting": "Meeting",
"meeting.title": "Meeting Mode",
"meeting.newMeeting": "New Meeting",
"meeting.startRecording": "Start Recording",
"meeting.stopRecording": "Stop Recording",
"meeting.recording": "Recording",
"meeting.processing": "Generating minutes...",
"meeting.completed": "Completed",
"meeting.error": "Error",
"meeting.elapsed": "Elapsed",
"meeting.memoPlaceholder": "Type a memo (Enter to add)",
"meeting.memoAdded": "Memo added",
"meeting.noSessions": "No meeting recordings",
"meeting.noSessionsDesc": "Press New Meeting to start recording",
"meeting.summary": "Summary",
"meeting.decisions": "Decisions",
"meeting.actionItems": "Action Items",
"meeting.timeline": "Timeline",
"meeting.transcript": "Raw Transcript",
"meeting.memos": "Memos",
"meeting.exportPdf": "Export PDF",
"meeting.exportMarkdown": "Export Markdown",
"meeting.delete": "Delete",
"meeting.deleteConfirm": "Delete this meeting record?",
"meeting.backToList": "Back to List",
"meeting.notificationTitle": "Minutes Ready",
"meeting.notificationBody": "Meeting minutes have been generated.",
"meeting.sessions": "{{count}} sessions",
"meeting.duration": "{{minutes}} min",
"meeting.editTitle": "Edit Title",
"meeting.untitled": "Untitled Meeting",
"meeting.processingStep.merging": "Merging transcript...",
"meeting.processingStep.generating": "Generating minutes with LLM...",
"meeting.processingStep.parsing": "Parsing minutes...",
"meeting.processingStep.saving": "Saving...",
"meeting.processingStep.notifying": "Sending notification...",
"meeting.transcriptTab": "Transcript",
"meeting.addDocument": "Add Document",
"meeting.selectTemplate": "Select Template",
"meeting.generate": "Generate",
"meeting.generating": "Generating document...",
"meeting.editMode": "Edit",
"meeting.previewMode": "Preview",
"meeting.modified": "Modified",
"meeting.originalText": "Original",
"meeting.editedText": "Edited",
"meeting.exportDocx": "Export DOCX",
"meeting.exportTxt": "Export TXT",
"meeting.exportFormat": "Export",
"meeting.customPrompt": "Custom Prompt",
"meeting.templateName": "Template Name",
"meeting.templatePrompt": "AI Prompt",
"meeting.templateSave": "Save Template",
"meeting.documentDeleted": "Document deleted",
"meeting.autoSaved": "Auto-saved",
"meeting.minutesTemplate": "Meeting Minutes",
"meeting.reportTemplate": "Report",
"meeting.ideaNoteTemplate": "Idea Note",
"meeting.customTemplate": "Custom",
"meeting.downloadTranscript": "Download Transcript",
"meeting.polish": "AI Polish",
"meeting.polishing": "AI is polishing transcript...",
"meeting.polished": "AI Polish complete",
"meeting.mindmapTemplate": "Mind Map",
"meeting.chat": "AI Chat",
"meeting.chatPlaceholder": "Ask about the meeting...",
"meeting.chatSend": "Send",
"meeting.chatClear": "Clear Chat",
"meeting.copyToClipboard": "Copy to Clipboard",
"meeting.copied": "Copied",
"meeting.chatCollapse": "Collapse Chat",
"meeting.chatExpand": "Expand Chat",
"meeting.exportMd": "Markdown (.md)",
"meeting.exportPdfFmt": "PDF (.pdf)",
"meeting.polishFailed": "AI polishing failed",
"meeting.viewDetailError": "Failed to load meeting details",
"meeting.startRecordingError": "Failed to start recording"
}