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:
parent
078304dda9
commit
87f2dac9e5
12 changed files with 0 additions and 864 deletions
|
|
@ -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.",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue