refactor(i18n): date 중복 버그 수정 + 고아 키 967건 삭제 (WS4)

- date.today/yesterday 중복 정의(uppercase 잔해 "TODAY"/"YESTERDAY")
  삭제 (ko/en) -> 한국어 사용자에게 잘못된 대문자 표시 버그 해소.
- 고아 키 967건 삭제: ko/en 109건 + 타 10 locale 858건.
- P1 재검증으로 20건 KEEP 전환 (camelCase license.feature 15 +
  nav 5) -- 동적 보간/프로퍼티 패스스루 참조로, typecheck가 잡지
  못하는 런타임 버그 15건 예방.
정책: docs/REFACTOR_POLICY.md DP3, DP9, 이식 인사이트 P1
This commit is contained in:
Yun Chan 2026-07-22 01:54:51 +09:00
parent 078304dda9
commit 87f2dac9e5
12 changed files with 0 additions and 864 deletions

View file

@ -17,21 +17,16 @@
"login.google": "Continue with Google",
"login.github": "Continue with GitHub",
"login.terms": "By continuing, you agree to the Terms of Service and Privacy Policy.",
"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.heroIdle": "Ready for voice recognition",
"dashboard.viewStats": "View Stats",
@ -51,16 +46,12 @@
"dashboard.planFree": "Free Plan",
"dashboard.planFeatureLocal": "Unlimited local backend",
"dashboard.planFeatureDaily": "Unlimited daily transcription",
"dashboard.stat": "Stats",
"dashboard.sys": "System",
"dashboard.currentBackend": "Current Backend",
"dashboard.backendLocal": "Local (Ollama)",
"dashboard.backendPremium": "Premium (Claude)",
"dashboard.loginRequired": "Login Required",
"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",
@ -68,7 +59,6 @@
"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",
@ -81,7 +71,6 @@
"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",
@ -177,37 +166,9 @@
"voice.error.engine": "Failed to start the speech engine. Please try again.",
"voice.warning.llmSkipped": "Ollama is unavailable — inserted the raw transcription.",
"status.localTime": "Local Time",
"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.cloud.title": "Cloud Sync (Optional)",
"onboarding.cloud.tagline": "D3RO works great offline. Sign in whenever you want to unlock more.",
"onboarding.cloud.benefit1": "Sync history & meetings across all your devices",
"onboarding.cloud.benefit2": "Premium LLMs (Claude, GPT-4 class)",
"onboarding.cloud.benefit3": "Team sharing · backups · web app access",
"onboarding.cloud.signInLater": "Sign in later from Settings",
"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",
@ -241,55 +202,31 @@
"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",
@ -307,11 +244,9 @@
"license.proPlus": "PRO+",
"license.subscribe": "Subscribe",
"license.upgrade": "Upgrade",
"license.currentPlan": "Current Plan",
"license.proPlan": "Pro — ₩9,900/mo",
"license.proPlusPlan": "Pro+ — ₩29,900/mo",
"license.quotaUsed": "{{used}}/{{limit}} used",
"license.quotaUnlimited": "Unlimited",
"license.tierComparison": "Tier Comparison",
"license.dailyUsage": "Daily Usage",
"license.feature.dictation": "Dictation",
@ -346,9 +281,6 @@
"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.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",
@ -364,17 +296,13 @@
"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",
"license.signInRequired": "Sign in to manage your subscription",
"license.signInToUpgrade": "Sign in to upgrade",
"license.subscriptionActive": "Subscription active",
"license.subscriptionManage": "Manage subscription",
"license.upgradeToProDesc": "Unlock Premium AI models, cloud sync, and more",
"license.currentPlanActive": "Your current plan",
"license.openBillingPage": "Open billing page",
"license.premiumQuota": "Premium Quota",
"license.modelHaiku": "Haiku",
"license.modelSonnet": "Sonnet",
@ -453,13 +381,6 @@
"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",
@ -472,30 +393,16 @@
"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",
@ -521,24 +428,13 @@
"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.chatReasoning": "Reasoning…",
@ -549,8 +445,6 @@
"meeting.startRecordingError": "Failed to start recording",
"meeting.diarize": "Diarize",
"meeting.diarizing": "Identifying speakers...",
"meeting.diarizeComplete": "Diarization complete",
"meeting.speaker": "Speaker",
"settings.hfToken": "HuggingFace Token",
"settings.hfTokenHint": "A HuggingFace token is required for speaker diarization",
"settings.diarization": "Speaker Diarization",
@ -625,7 +519,6 @@
"mobile.set.haptic": "Haptic Feedback",
"mobile.set.logout": "LOGOUT",
"mobile.set.logoutConfirm": "Are you sure you want to log out?",
"mobile.set.connected": "CLOUD CONNECTED",
"mobile.login.title": "D3RO-VOICE",
"mobile.login.subtitle": "PRECISION VOICE INTELLIGENCE",
@ -640,11 +533,6 @@
"mobile.login.signUp": "Sign Up",
"mobile.login.notConfigured": "Supabase not configured. Set EXPO_PUBLIC_SUPABASE_URL in .env",
"mobile.status.model": "CLOUD CLAUDE",
"mobile.status.link": "PRECISION DATA LINK",
"date.today": "TODAY",
"date.yesterday": "YESTERDAY",
"onboarding.title": "D3RO Voice Initial Setup",
"onboarding.subtitle": "Download the model required to use the voice assistant.",