d3ro-voice/packages/i18n/src/locales/en.json
Yun Chan ad6bb70c20 fix(settings): show the live caption model under the dictation model
The caption model selector now sits directly under the dictation model in
the STT tab's Local Whisper card, where people look for it, and stays in the
General tab's caption section as well; both use one shared component. The
first selector is renamed to 'Dictation model' so the two are told apart.
2026-09-24 22:08:05 +09:00

1907 lines
116 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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",
"nav.meetings": "Meetings",
"nav.record": "Record",
"nav.chat": "Chat",
"nav.actions": "Actions",
"nav.teams": "Teams",
"nav.billing": "Billing",
"nav.logout": "Logout",
"login.subtitle": "AI Voice Assistant",
"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.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.days": "days",
"dashboard.sessions": "Sessions",
"dashboard.recentTranscriptions": "Recent Transcriptions",
"dashboard.noHistory": "No history — press your hotkey to start recording",
"dashboard.entries": "{{count}} entries",
"dashboard.heroIdle": "Ready for voice recognition",
"dashboard.viewStats": "View Stats",
"dashboard.systemSettings": "System Settings",
"dashboard.keySetup": "Key Setup",
"dashboard.systemOk": "System OK",
"dashboard.systemIssue": "Needs Attention",
"dashboard.captionPlaceholder": "Recognized text will appear here in real time.",
"dashboard.captionStandby": "Standby",
"dashboard.inputLevel": "Input Level",
"dashboard.recordingTime": "Recording Time",
"dashboard.recognizedWords": "Words Recognized",
"dashboard.streakUse": "Streak",
"dashboard.modelLabel": "Model",
"dashboard.statusLabel": "Status",
"dashboard.localConnected": "Local",
"dashboard.planFree": "Free Plan",
"dashboard.planFeatureLocal": "Unlimited local backend",
"dashboard.planFeatureDaily": "Unlimited daily transcription",
"dashboard.currentBackend": "Current Backend",
"dashboard.backendLocal": "Local (Ollama)",
"dashboard.backendPremium": "Premium (Claude)",
"history.title": "Transcription History",
"history.search": "Search...",
"history.entries": "{{count}} entries",
"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.noResults": "No results found",
"dictionary.noWords": "No words — add custom words to improve STT accuracy",
"dictionary.used": "Used {{count}} times",
"dictionary.export": "Export",
"dictionary.import": "Import",
"dictionary.exported": "Dictionary exported.",
"dictionary.exportFailed": "Dictionary export failed.",
"dictionary.importedCount": "Imported {{imported}}, skipped {{skipped}}, errors {{errors}}.",
"dictionary.importFailed": "Dictionary import failed.",
"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.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.cloud": "Cloud",
"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.sttProvider": "STT Engine Provider",
"settings.sttProvider.local": "Local Whisper (Offline/Free)",
"settings.sttProvider.openai": "OpenAI Whisper (High Accuracy)",
"settings.sttProvider.groq": "Groq Whisper (LPU Ultra Fast ~200ms)",
"settings.sttProvider.deepgram": "Deepgram Nova-3 (Best Accuracy)",
"settings.sttProvider.assemblyai": "AssemblyAI Universal-2 (Acoustic AI)",
"settings.sttProvider.google": "Google Gemini 2.0 Flash Audio",
"settings.sttProvider.custom": "Custom (OpenAI-Compatible)",
"settings.sttFallbackToLocal": "Auto Fallback to Local Whisper",
"settings.sttFallbackToLocalHint": "Automatically switch to offline local Whisper if cloud STT fails",
"settings.whisperModel": "Dictation 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.model.largeTurbo": "large-v3-turbo (1.6 GB, fast & accurate)",
"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 gemma4:e4b).",
"settings.llmBackend": "LLM Engine",
"settings.backend.local": "Local (Ollama, Free)",
"settings.backend.premium": "Premium (Claude AI, Subscription)",
"settings.backend.localHint": "Polish text with local Ollama server. Fully free, no internet needed.",
"settings.backend.premiumHint": "High-quality polishing with Anthropic Claude AI. Login + subscription required. Auto-fallback to Local on network failure.",
"settings.conversationBackend": "Voice Chat Engine",
"settings.convBackend.local": "Local (STT→LLM→TTS, Free)",
"settings.convBackend.realtime": "Live (OpenAI gpt-realtime, Subscription)",
"settings.convBackend.localHint": "Converse via the local pipeline. Fully free, no internet needed.",
"settings.convBackend.realtimeHint": "Real-time voice conversation with OpenAI Realtime models. Sub-second responses + interruption support. Login + Pro subscription required. Auto-fallback to Local on failure.",
"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",
"voice.error.modelMissing": "Speech model is not installed. Please download it first.",
"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.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 →",
"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 gemma4:26b (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",
"service.premiumLlm": "PREMIUM LLM",
"service.notConfigured": "NOT SET",
"common.cancel": "Cancel",
"common.back": "Back",
"common.edit": "Edit",
"common.save": "Save",
"common.delete": "Delete",
"common.close": "Close",
"common.confirm": "Confirm",
"common.loading": "Loading...",
"common.copy": "Copy",
"common.test": "Test",
"common.stop": "Stop",
"memo.addTag": "Add Tag",
"memo.tagPlaceholder": "Type a tag and press Enter",
"memo.export": "Export as Markdown",
"memo.clearFilter": "Clear filter",
"voiceCommand.title": "Voice Commands",
"voiceCommand.keywordPlaceholder": "Type keyword and press Enter",
"voiceCommand.noKeywords": "No keywords",
"chain.title": "LLM 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.inputSource": "Input Source",
"chain.inputSource.original": "Original Text",
"chain.inputSource.previous": "Previous Step Result",
"chain.selectInstruction": "Select Command",
"chain.noChains": "No chains — create a pipeline to run multiple commands in sequence",
"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.subscribe": "Subscribe",
"license.upgrade": "Upgrade",
"license.proPlan": "Pro plan",
"license.proPlusPlan": "Pro+ plan",
"license.quotaUsed": "{{used}}/{{limit}} used",
"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.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.loginRequired.title": "{{feature}} requires sign in",
"license.loginRequired.desc": "Sign in to use cloud features. Local features continue to work without signing in.",
"license.loginRequired.signIn": "Sign in",
"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.unlimited": "Unlimited",
"license.nav": "License",
"license.signInRequired": "Sign in to manage your subscription",
"license.signInToUpgrade": "Sign in to upgrade",
"license.subscriptionManage": "Manage subscription",
"license.upgradeToProDesc": "Unlock Premium AI models, cloud sync, and more",
"license.currentPlanActive": "Your current plan",
"license.premiumQuota": "Premium Quota",
"license.modelHaiku": "Haiku",
"license.modelSonnet": "Sonnet",
"license.modelOpus": "Opus",
"license.quotaWeekly": "weekly",
"license.quotaDaily": "daily",
"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",
"conversation.recording.hint": "SPEAK NOW · PRESS ⏹ TO SEND",
"conversation.thinking.placeholder": "Waiting for response…",
"conversation.state.recording": "RECORDING",
"conversation.error.phase.stt": "Speech Recognition",
"conversation.error.phase.llm": "Response",
"conversation.error.phase.tts": "Voice Playback",
"conversation.error.noSpeech": "No speech detected. Check your microphone and try again.",
"conversation.realtime.badge": "LIVE",
"conversation.realtime.connecting": "Connecting",
"conversation.realtime.fallback": "Live connection failed — switched to local conversation.",
"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...",
"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.stopRecording": "Stop Recording",
"meeting.recording": "Recording",
"meeting.processing": "Generating minutes...",
"meeting.completed": "Completed",
"meeting.error": "Error",
"meeting.memoPlaceholder": "Type a memo (Enter to add)",
"meeting.noSessions": "No meeting recordings",
"meeting.noSessionsDesc": "Press New Meeting to start recording",
"meeting.transcript": "Raw Transcript",
"meeting.memos": "Memos",
"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.downloadTranscript": "Download Transcript",
"meeting.polish": "AI Polish",
"meeting.polishing": "AI is polishing transcript...",
"meeting.chat": "AI Chat",
"meeting.chatPlaceholder": "Ask about the meeting...",
"meeting.chatClear": "Clear Chat",
"meeting.copyToClipboard": "Copy to Clipboard",
"meeting.chatCollapse": "Collapse Chat",
"meeting.chatExpand": "Expand Chat",
"meeting.chatReasoning": "Reasoning…",
"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",
"meeting.diarize": "Diarize",
"meeting.diarizing": "Identifying speakers...",
"settings.hfToken": "HuggingFace Token",
"settings.hfTokenHint": "A HuggingFace token is required for speaker diarization",
"settings.diarization": "Speaker Diarization",
"settings.diarizationHint": "Automatically identify speakers after recording ends",
"theme.label": "Theme",
"theme.dark": "Dark",
"theme.light": "Light",
"theme.auto": "Auto (system)",
"theme.nord": "Nord",
"theme.solarized": "Solarized",
"theme.catppuccin": "Catppuccin",
"theme.dracula": "Dracula",
"mobile.dash.title": "D3RO-VOICE",
"mobile.dash.sessionOverview": "SESSION OVERVIEW",
"mobile.dash.today": "TODAY",
"mobile.dash.words": "WORDS",
"mobile.dash.streak": "STREAK",
"mobile.dash.rec": "REC",
"mobile.dash.min": "MIN",
"mobile.dash.backend": "BACKEND",
"mobile.dash.tier": "TIER",
"mobile.dash.free": "FREE",
"mobile.dash.tapToRecord": "Tap REC to start recording",
"mobile.dash.usage": "USAGE",
"mobile.dash.dictation": "Dictation",
"mobile.dash.llmProcess": "LLM Process",
"mobile.dash.premiumQuota": "Premium Quota",
"mobile.dash.unlimited": "Unlimited",
"mobile.dash.sessions": "SESSIONS",
"mobile.dash.synced": "SYNCED",
"mobile.dash.syncError": "SYNC ERROR",
"mobile.dash.cloudSynced": "CLOUD SYNCED",
"mobile.dash.loading": "Loading your dashboard...",
"mobile.dash.loadError": "Dashboard data could not be loaded. The app will not display invented totals.",
"mobile.dash.retry": "Try again",
"mobile.dash.rewardsTitle": "PRO & REWARDS",
"mobile.dash.paidSummary": "This paid plan is server verified and removes ads.",
"mobile.dash.freeSummary": "Earn AI credits with rewarded ads or subscribe for an ad-free plan.",
"mobile.dash.openPlans": "Open plans and rewards →",
"mobile.dash.usedToday": "{{count}} today",
"mobile.dash.rewardCredits": "Reward credits",
"mobile.dash.recent": "RECENT TRANSCRIPTS",
"mobile.dash.items": "{{count}} items",
"mobile.dash.noHistory": "No completed transcripts yet. Start a recording or import an audio file.",
"mobile.status.cloudModel": "CLOUD AI",
"mobile.status.secureDataLink": "SECURE DATA LINK",
"mobile.hist.title": "HISTORY",
"mobile.hist.all": "ALL",
"mobile.hist.saved": "SAVED",
"mobile.hist.processing": "PROC",
"mobile.hist.empty": "No history yet. Start recording!",
"mobile.hist.emptySearch": "No history matches these conditions.",
"mobile.hist.searchPlaceholder": "Search titles and transcripts",
"mobile.hist.entries": "{{count}} entries",
"mobile.hist.wordsShort": "{{count}} W",
"mobile.hist.offline": "Offline — showing the encrypted device cache",
"mobile.hist.cachedAt": "Last synced {{time}}",
"mobile.hist.cacheWarning": "The secure cache could not be updated. Online data is still available.",
"mobile.hist.realtimeWaiting": "Reconnecting live sync — pull to refresh remains available.",
"mobile.hist.loadError": "History could not be loaded.",
"mobile.hist.retry": "Retry",
"mobile.hist.favorite": "Favorite",
"mobile.hist.unfavorite": "Remove favorite",
"mobile.hist.delete": "Delete",
"mobile.hist.deleteTitle": "Delete history",
"mobile.hist.deleteBody": "Delete this history entry? Its linked source audio file will be preserved.",
"mobile.hist.deleteFailed": "The server did not confirm deletion, so the entry was restored.",
"mobile.hist.favoriteFailed": "The server did not confirm the change, so the previous state was restored.",
"mobile.hist.processingProgress": "Processing {{progress}}%",
"mobile.hist.loadMore": "Loading older history",
"mobile.hist.detailTitle": "History detail",
"mobile.hist.back": "Back",
"mobile.hist.detailLoading": "Loading history...",
"mobile.hist.notFound": "This entry does not exist or is not accessible.",
"mobile.hist.edit": "Edit",
"mobile.hist.save": "Save",
"mobile.hist.saving": "Saving...",
"mobile.hist.cancel": "Cancel",
"mobile.hist.titleLabel": "Title",
"mobile.hist.originalLabel": "Original",
"mobile.hist.polishedLabel": "Polished",
"mobile.hist.summaryLabel": "Summary",
"mobile.hist.metadata": "Metadata",
"mobile.hist.mode": "Mode",
"mobile.hist.status": "Status",
"mobile.hist.language": "Language",
"mobile.hist.duration": "Duration",
"mobile.hist.model": "Model",
"mobile.hist.created": "Created",
"mobile.hist.updated": "Updated",
"mobile.hist.revision": "Revision",
"mobile.hist.audio": "Source audio",
"mobile.hist.audioNone": "No linked audio file is available.",
"mobile.hist.audioPlay": "Play",
"mobile.hist.audioPause": "Pause",
"mobile.hist.audioResume": "Resume",
"mobile.hist.audioStop": "Stop",
"mobile.hist.audioPending": "Upload status: {{status}}",
"mobile.hist.audioError": "The audio could not be opened safely.",
"mobile.hist.jobs": "Processing jobs",
"mobile.hist.jobsNone": "No processing jobs are linked.",
"mobile.hist.share": "Share",
"mobile.hist.shareFailed": "The share sheet could not be opened.",
"mobile.hist.editFailed": "The server did not confirm the edit.",
"mobile.hist.conflict": "Another device edited this first. Your draft is preserved; review the latest version.",
"mobile.hist.reloadLatest": "Load latest from server",
"mobile.hist.savedSuccess": "Saved on the server.",
"mobile.hist.validationTitle": "The title must be 160 characters or fewer.",
"mobile.hist.validationOriginal": "The original transcript cannot be empty.",
"mobile.dictionary.title": "CUSTOM DICTIONARY",
"mobile.dictionary.count": "{{count}} words",
"mobile.dictionary.add": "Add word",
"mobile.dictionary.search": "Search words or pronunciations",
"mobile.dictionary.loading": "Loading the server dictionary...",
"mobile.dictionary.loadingMore": "Loading older words",
"mobile.dictionary.retry": "Try again",
"mobile.dictionary.empty": "No words have been added. Add names or technical terms that speech recognition often misses.",
"mobile.dictionary.emptySearch": "No words match the search and category filters.",
"mobile.dictionary.realtimeWaiting": "Reconnecting live sync — pull to refresh remains available.",
"mobile.dictionary.category": "Category",
"mobile.dictionary.category.all": "All",
"mobile.dictionary.category.user": "User",
"mobile.dictionary.category.technical": "Technical",
"mobile.dictionary.category.auto": "Automatic",
"mobile.dictionary.usage": "Used {{count}} times",
"mobile.dictionary.addTitle": "Add a new word",
"mobile.dictionary.editTitle": "Edit word",
"mobile.dictionary.word": "Word",
"mobile.dictionary.pronunciation": "Pronunciation (optional)",
"mobile.dictionary.edit": "Edit",
"mobile.dictionary.delete": "Delete",
"mobile.dictionary.deleting": "Deleting...",
"mobile.dictionary.deleteTitle": "Delete dictionary word",
"mobile.dictionary.deleteBody": "Delete ‘{{word}}’? It will also be removed from your other devices.",
"mobile.dictionary.cancel": "Cancel",
"mobile.dictionary.save": "Save on server",
"mobile.dictionary.saving": "Saving...",
"mobile.dictionary.error.auth": "Your session or ownership of this word could not be verified.",
"mobile.dictionary.error.conflict": "Another device edited or deleted this word first. Review the latest list.",
"mobile.dictionary.error.duplicate": "This word already exists in the same category.",
"mobile.dictionary.error.network": "Check your network connection and try again.",
"mobile.dictionary.error.notFound": "This word does not exist or is not accessible.",
"mobile.dictionary.error.validation": "Enter a 1–120 character word and an optional pronunciation up to 200 characters.",
"mobile.dictionary.error.server": "The server did not confirm the dictionary operation.",
"mobile.commands.title": "AI COMMANDS",
"mobile.commands.count": "{{count}} server presets",
"mobile.commands.readOnlyBadge": "READ ONLY",
"mobile.commands.contractNotice": "The server does not currently have a user-command storage schema. This screen does not pretend the list is editable; it only provides a test bench that executes verified built-in commands through authenticated Cloud AI. Automatic post-recording execution is not connected yet.",
"mobile.commands.available": "AVAILABLE SERVER COMMANDS",
"mobile.commands.translate.name": "Translate to English",
"mobile.commands.translate.description": "Translate the input into natural English and return only the translation.",
"mobile.commands.summarize.name": "Key summary",
"mobile.commands.summarize.description": "Summarize the key points in no more than three lines.",
"mobile.commands.formal.name": "Professional rewrite",
"mobile.commands.formal.description": "Preserve the meaning while rewriting in a formal business style.",
"mobile.commands.explain.name": "Explain code",
"mobile.commands.explain.description": "Explain the code's responsibilities and caveats in Korean.",
"mobile.commands.testBench": "AUTHENTICATED TEST BENCH",
"mobile.commands.selected": "Selected: {{name}}",
"mobile.commands.inputPlaceholder": "Enter real text to process with the server command.",
"mobile.commands.run": "Run on server",
"mobile.commands.running": "Running...",
"mobile.commands.cancel": "Cancel",
"mobile.commands.serverProcessing": "Cloud AI is processing after authentication and quota checks.",
"mobile.commands.serverResult": "SERVER RESULT",
"mobile.commands.retry": "Run again",
"mobile.commands.error.auth": "Your session expired. Sign in again.",
"mobile.commands.error.invalid": "The input is empty or exceeds the allowed length.",
"mobile.commands.error.quota": "You have used today's Cloud AI allowance.",
"mobile.commands.error.model": "The selected AI model is not available on your plan.",
"mobile.commands.error.provider": "The AI provider is not configured or temporarily unavailable.",
"mobile.commands.error.timeout": "The AI response timed out.",
"mobile.commands.error.network": "Check your network connection and try again.",
"mobile.commands.error.response": "The AI returned an invalid result.",
"mobile.commands.error.cancelled": "Command execution was cancelled.",
"mobile.commands.error.notFound": "This command is not supported.",
"mobile.commands.error.server": "The server command could not be completed.",
"mobile.commands.syncedCount": "{{count}} synchronized commands",
"mobile.commands.add": "Add",
"mobile.commands.syncNotice": "Built-in and custom commands sync with your account. The active command is the server source of truth for supported post-recording processing.",
"mobile.commands.loading": "Loading server commands...",
"mobile.commands.active": "ACTIVE",
"mobile.commands.activate": "Activate",
"mobile.commands.deactivate": "Deactivate",
"mobile.commands.deleteTitle": "Delete custom command",
"mobile.commands.deleteConfirm": "Delete ‘{{name}}’? It will be removed from every device.",
"mobile.commands.noSelection": "Select a command to run.",
"mobile.commands.addTitle": "Add custom command",
"mobile.commands.editTitle": "Edit custom command",
"mobile.commands.name": "Name",
"mobile.commands.descriptionLabel": "Description",
"mobile.commands.prompt": "Server prompt",
"mobile.commands.saving": "Saving...",
"mobile.commands.save": "Save",
"mobile.commands.syncError.auth": "Your session or ownership of this command could not be verified.",
"mobile.commands.syncError.validation": "Use a 1–80 character name, description up to 240 characters, and a 1–4000 character prompt.",
"mobile.commands.syncError.duplicate": "A command with this name already exists.",
"mobile.commands.syncError.conflict": "Another device changed this first. The latest list has been loaded.",
"mobile.commands.syncError.notFound": "This command does not exist or is not accessible.",
"mobile.commands.syncError.server": "The server did not confirm the command change.",
"mobile.knowledge.title": "KNOWLEDGE",
"mobile.knowledge.description": "Synchronize mobile files and text as knowledge documents and run real search.",
"mobile.knowledge.count": "{{count}} documents",
"mobile.knowledge.import": "Import text file",
"mobile.knowledge.importing": "Importing",
"mobile.knowledge.contractNotice": "UTF-8 TXT and Markdown content is stored as account-scoped knowledge chunks. A document becomes ready only after the server verifies an embedding for every chunk. The app does not pretend PDF or DOCX is parsed and never substitutes original text for a search answer.",
"mobile.knowledge.realtimeWaiting": "Reconnecting live document sync. Pull to refresh remains available.",
"mobile.knowledge.documentSearch": "Search document titles",
"mobile.knowledge.searchDocuments": "Search list",
"mobile.knowledge.queryTitle": "Semantic search",
"mobile.knowledge.queryNotice": "Only results completed by the authenticated search-knowledge server are shown.",
"mobile.knowledge.queryPlaceholder": "Ask or search your knowledge base",
"mobile.knowledge.query": "Search",
"mobile.knowledge.querying": "Searching",
"mobile.knowledge.cancel": "Cancel",
"mobile.knowledge.resultCount": "{{count}} search results",
"mobile.knowledge.queryEmpty": "No knowledge chunks passed the similarity threshold.",
"mobile.knowledge.importReady": "The file was saved and every chunk was indexed.",
"mobile.knowledge.importSavedPending": "The file and chunks were saved, but indexing did not complete. Use Retry index on the document.",
"mobile.knowledge.cleanupWarning": "The temporary import copy could not be removed. The operating system may later clear the app cache.",
"mobile.knowledge.indexReady": "The server verified that every chunk is indexed.",
"mobile.knowledge.deleteTitle": "Delete knowledge document",
"mobile.knowledge.deleteBody": "Delete ‘{{title}}’ and all of its knowledge chunks from your account? This cannot be undone.",
"mobile.knowledge.delete": "Delete",
"mobile.knowledge.deleting": "Deleting",
"mobile.knowledge.retry": "Reload",
"mobile.knowledge.library": "DOCUMENT LIBRARY",
"mobile.knowledge.loading": "Loading server knowledge documents",
"mobile.knowledge.empty": "No knowledge documents are stored. Import a UTF-8 TXT or Markdown file.",
"mobile.knowledge.emptySearch": "No documents match the title search.",
"mobile.knowledge.noFileName": "No file name",
"mobile.knowledge.chunkCount": "{{count}} chunks",
"mobile.knowledge.teamShared": "Shared by a team. Only the owner can index or delete it.",
"mobile.knowledge.indexing": "Indexing",
"mobile.knowledge.retryIndex": "Retry index",
"mobile.knowledge.statusProcessing": "PROCESSING",
"mobile.knowledge.statusReady": "READY",
"mobile.knowledge.statusPending": "PENDING",
"mobile.knowledge.unknownDocument": "Accessible document",
"mobile.knowledge.error.auth": "Sign in again to use the knowledge base.",
"mobile.knowledge.error.conflict": "Another device changed or removed this document first. Review the latest list.",
"mobile.knowledge.error.forbidden": "You do not have permission to change this document.",
"mobile.knowledge.error.indexUnavailable": "The embedding provider is not configured. The document remains pending.",
"mobile.knowledge.error.indexFailed": "The server did not embed every knowledge chunk, so the document was not marked ready.",
"mobile.knowledge.error.response": "The server did not return a complete, verifiable knowledge result.",
"mobile.knowledge.error.network": "Check your network connection and try again.",
"mobile.knowledge.error.notFound": "The document does not exist or is not accessible.",
"mobile.knowledge.error.timeout": "The knowledge server timed out. Incomplete documents remain pending.",
"mobile.knowledge.error.validation": "Use valid input and a UTF-8 TXT or Markdown file no larger than 1 MB.",
"mobile.knowledge.error.cancelled": "The knowledge operation was cancelled.",
"mobile.knowledge.error.server": "The knowledge server did not confirm completion.",
"mobile.actions.title": "ACTIONS",
"mobile.actions.description": "Parse natural-language commands into safe mobile actions and run them after confirmation.",
"mobile.actions.subtitle": "Mobile-safe actions that require confirmation",
"mobile.actions.confirmBadge": "CONFIRM FIRST",
"mobile.actions.contractNotice": "Cloud AI only parses commands into strict JSON. Creating meetings, searching knowledge, and saving meeting memos are the only mobile allowlisted actions, and each requires explicit confirmation. Team invites and OS or external-app side effects never run automatically. Execution history is currently stored per account on this device; no server audit log exists yet.",
"mobile.actions.commandTitle": "Natural-language command",
"mobile.actions.inputPlaceholder": "Describe the exact operation you want to run",
"mobile.actions.parse": "Analyze on server",
"mobile.actions.parsing": "Analyzing",
"mobile.actions.cancel": "Cancel",
"mobile.actions.serverParsing": "Authenticated Cloud AI is validating the action contract.",
"mobile.actions.executing": "Executing",
"mobile.actions.reviewTitle": "Review before execution",
"mobile.actions.allowed": "ALLOWLISTED",
"mobile.actions.blocked": "BLOCKED",
"mobile.actions.type": "Action type",
"mobile.actions.arguments": "Server-parsed values",
"mobile.actions.rationale": "Parsing rationale",
"mobile.actions.confirmWarning": "Confirming performs the displayed account-data operation for real. Review every value first.",
"mobile.actions.reject": "Do not execute",
"mobile.actions.confirmExecute": "Confirm and execute",
"mobile.actions.externalBlocked": "Team invitations require an external messaging side effect and permission checks, so mobile automatic execution blocks them.",
"mobile.actions.unknownBlocked": "Required data is missing or the action is unsupported, so nothing will run.",
"mobile.actions.historyNotRecorded": "The failure could not be saved to this device's execution history.",
"mobile.actions.resultTitle": "Verified execution result",
"mobile.actions.resultWithoutHistory": "The operation completed, but local history storage failed. Check the result before attempting it again.",
"mobile.actions.historyTitle": "Execution history on this device",
"mobile.actions.refreshHistory": "Refresh history",
"mobile.actions.historyEmpty": "This account has not confirmed and executed a mobile action on this device.",
"mobile.actions.historySucceeded": "Succeeded",
"mobile.actions.historyFailed": "Failed",
"mobile.actions.type.createMeeting": "Create meeting workspace",
"mobile.actions.type.searchKnowledge": "Search knowledge base",
"mobile.actions.type.createMemo": "Save meeting memo",
"mobile.actions.type.sendTeamInvite": "Send team invitation",
"mobile.actions.type.unknown": "Unsupported action",
"mobile.actions.memoArgs": "Meeting {{meetingId}} · {{content}}",
"mobile.actions.inviteArgs": "{{email}} · role {{role}}",
"mobile.actions.noArguments": "No execution arguments",
"mobile.actions.meetingCreated": "Created the ‘{{title}}’ meeting workspace on the server.",
"mobile.actions.knowledgeSearched": "The server knowledge search returned {{count}} results.",
"mobile.actions.memoCreated": "Saved the memo to meeting {{meetingId}} on the server.",
"mobile.actions.error.blocked": "This action is not mobile-safe or did not receive explicit user confirmation.",
"mobile.actions.error.auth": "Sign in again to use actions.",
"mobile.actions.error.cancelled": "The action request was cancelled.",
"mobile.actions.error.forbidden": "This account is not allowed to perform the requested data operation.",
"mobile.actions.error.history": "This device could not read or save action history.",
"mobile.actions.error.invalid": "The command or arguments are outside the server action contract.",
"mobile.actions.error.response": "Cloud AI did not return the strict action JSON contract, so execution was blocked.",
"mobile.actions.error.model": "The selected Cloud AI model is unavailable on the current plan.",
"mobile.actions.error.network": "Check your network connection and try again.",
"mobile.actions.error.provider": "Cloud AI or the knowledge embedding provider is currently unavailable.",
"mobile.actions.error.quota": "The daily Cloud AI allowance has been reached.",
"mobile.actions.error.timeout": "The server timed out. Check whether the operation completed before retrying.",
"mobile.actions.error.server": "The server did not confirm action completion.",
"mobile.rec.title": "RECORDER",
"mobile.rec.session": "REC_SESSION",
"mobile.rec.ready": "READY",
"mobile.rec.recording": "RECORDING",
"mobile.rec.processing": "PROCESSING",
"mobile.rec.done": "DONE",
"mobile.rec.error": "ERROR",
"mobile.rec.start": "START RECORDING",
"mobile.rec.stop": "STOP",
"mobile.rec.cancel": "CANCEL",
"mobile.rec.newRecording": "NEW RECORDING",
"mobile.rec.listening": "LISTENING_",
"mobile.rec.realtime": "REAL-TIME TRANSCRIPT",
"mobile.rec.initLog": "> initializing voice recording protocol...",
"mobile.rec.micDenied": "Microphone permission denied",
"mobile.rec.supabaseNotConfigured": "Supabase not configured",
"mobile.rec.loginRequired": "Login required",
"mobile.rec.stateSelecting": "SELECTING AUDIO FILE",
"mobile.rec.stateStarting": "STARTING RECORDER",
"mobile.rec.stateRecording": "RECORDING",
"mobile.rec.statePaused": "RECORDING PAUSED",
"mobile.rec.stateStopping": "FINALIZING RECORDING",
"mobile.rec.stateValidating": "VERIFYING AUDIO",
"mobile.rec.stateUploading": "UPLOADING SECURELY",
"mobile.rec.stateTranscribing": "TRANSCRIBING",
"mobile.rec.stateSaving": "SAVING AND SYNCING",
"mobile.rec.stateCancelling": "CANCELLING",
"mobile.rec.stateDone": "SAVED TO HISTORY",
"mobile.rec.stateError": "PROCESSING FAILED",
"mobile.rec.stateReady": "READY",
"mobile.rec.startFailed": "Could not start recording.",
"mobile.rec.stateChangeFailed": "Could not change the recording state.",
"mobile.rec.processFailed": "Could not process the recording.",
"mobile.rec.importFailed": "Could not import the audio file.",
"mobile.rec.sharedImportFailed": "Could not import the shared audio or video.",
"mobile.rec.cancelFailed": "Could not cancel the recording.",
"mobile.rec.shareTitle": "D3RO Voice transcription",
"mobile.rec.shareDialogTitle": "Share transcription",
"mobile.rec.shareFailed": "Could not share the transcription.",
"mobile.rec.noSpeech": "No speech was detected in this audio.",
"mobile.rec.syncedCopy": "SYNCED COPY",
"mobile.rec.paused": "PAUSED",
"mobile.rec.importAudio": "IMPORT AUDIO FILE",
"mobile.rec.shareTranscript": "SHARE TRANSCRIPT",
"mobile.rec.sharing": "SHARING...",
"mobile.rec.pause": "PAUSE",
"mobile.rec.resume": "RESUME",
"mobile.rec.cancelling": "CANCELLING...",
"mobile.rec.cancelProcessing": "CANCEL PROCESSING",
"mobile.rec.stateQueued": "QUEUED FOR RETRY",
"mobile.rec.stateRecoverable": "RECOVERED RECORDING",
"mobile.rec.interrupted": "Recording paused by Android: {{reason}}",
"mobile.rec.recoveredReason": "Android recovered an interrupted recording: {{reason}}",
"mobile.rec.recoveryFailed": "Could not inspect the interrupted recording.",
"mobile.rec.queuedRetry": "The verified local audio is safe and will retry when the network and session are available.",
"mobile.rec.processingCancelled": "Audio processing was cancelled on this device.",
"mobile.rec.meetingRecording": "MEETING RECORDING",
"mobile.rec.recoveredHelp": "Review this valid partial WAV, then process it or discard it explicitly.",
"mobile.rec.queuedHelp": "Upload progress is checkpointed. Closing and reopening the app resumes the same file without reporting false success.",
"mobile.rec.viewMeeting": "VIEW MEETING",
"mobile.rec.processRecovered": "PROCESS RECOVERED AUDIO",
"mobile.rec.discardRecovered": "DISCARD RECOVERED AUDIO",
"mobile.rec.retryNow": "RETRY NOW",
"mobile.talk.title": "TALK",
"mobile.talk.live": "LIVE",
"mobile.talk.you": "YOU",
"mobile.talk.claude": "CLAUDE",
"mobile.talk.placeholder": "Type or speak...",
"mobile.talk.greeting": "Hello! How can I help you today?",
"mobile.talk.cloudEngine": "SECURE CLOUD AI",
"mobile.talk.clear": "CLEAR",
"mobile.talk.empty": "Start a new conversation.",
"mobile.talk.thinking": "Generating a response...",
"mobile.talk.transcribing": "Transcribing your speech on this device or the secure cloud...",
"mobile.talk.recording": "RECORDING",
"mobile.talk.releaseToSend": "Release to transcribe and send",
"mobile.talk.holdToTalk": "Hold to talk",
"mobile.talk.pttHint": "Hold the microphone while speaking. Release to send.",
"mobile.talk.cancel": "Cancel",
"mobile.talk.playSpeech": "Play this response aloud",
"mobile.talk.stopSpeech": "Stop speech playback",
"mobile.talk.phase.idle": "SECURE CLOUD AI · READY",
"mobile.talk.phase.recording": "MICROPHONE · LIVE",
"mobile.talk.phase.transcribing": "SPEECH RECOGNITION",
"mobile.talk.phase.thinking": "AI STREAM · LIVE",
"mobile.talk.phase.speaking": "ANDROID SPEECH · PLAYING",
"mobile.talk.send": "Send message",
"mobile.talk.retry": "Try again",
"mobile.talk.error.auth": "Your session expired. Please sign in again.",
"mobile.talk.error.invalid": "This message cannot be sent. Shorten it and try again.",
"mobile.talk.error.quota": "You have used today's AI conversation allowance.",
"mobile.talk.error.model": "The selected AI model is not available on your plan.",
"mobile.talk.error.provider": "The AI provider is not configured or temporarily unavailable.",
"mobile.talk.error.timeout": "The AI response timed out.",
"mobile.talk.error.network": "Check your network connection and try again.",
"mobile.talk.error.noSpeech": "No speech was recognized. Try speaking closer to the microphone.",
"mobile.talk.error.response": "The AI returned an invalid response.",
"mobile.talk.error.cancelled": "The request was cancelled.",
"mobile.talk.error.micPermission": "Microphone permission is required for push-to-talk.",
"mobile.talk.error.recording": "The microphone recording could not be completed.",
"mobile.talk.error.tooShort": "Hold the microphone a little longer before releasing it.",
"mobile.talk.error.sttQuota": "You have used today's speech transcription allowance.",
"mobile.talk.error.stt": "Speech recognition failed on both the secure cloud and this device.",
"mobile.talk.error.ttsUnavailable": "Android speech playback is not installed or this language is unavailable.",
"mobile.talk.error.tts": "Android could not play this response aloud.",
"mobile.talk.debugAudioE2e": "RUN REAL AUDIO E2E",
"mobile.talk.error.server": "The AI request could not be completed.",
"mobile.report.action": "Report",
"mobile.report.title": "Report AI response",
"mobile.report.body": "Tell the D3RO Voice team about a problematic response without leaving the app.",
"mobile.report.selectedOutput": "AI response included with this report",
"mobile.report.reason.harmful": "Harmful or dangerous advice",
"mobile.report.reason.sexual": "Sexual content",
"mobile.report.reason.hateful": "Hate or harassment",
"mobile.report.reason.violent": "Violent content",
"mobile.report.reason.selfHarm": "Self-harm or suicide content",
"mobile.report.reason.misinformation": "Clearly incorrect information",
"mobile.report.reason.privacy": "Exposed personal information",
"mobile.report.reason.spam": "Spam or irrelevant response",
"mobile.report.reason.other": "Other",
"mobile.report.commentLabel": "Additional details (optional)",
"mobile.report.commentPlaceholder": "Add only what reviewers need. Do not include personal information.",
"mobile.report.privacyNote": "Only the selected AI response and report reason are sent. Audio, the full conversation, and your original prompt are not attached automatically.",
"mobile.report.submit": "Send report",
"mobile.report.submitting": "Sending",
"mobile.report.cancel": "Cancel",
"mobile.report.done": "Done",
"mobile.report.successTitle": "Report submitted",
"mobile.report.successBody": "The team will review it against our policy and safety standards.",
"mobile.report.receipt": "Receipt {{id}}",
"mobile.report.error.auth": "Check your sign-in status and try again.",
"mobile.report.error.invalid": "Select a reason and review the report details.",
"mobile.report.error.source": "This AI response is no longer reportable or could not be verified.",
"mobile.report.error.alreadyReported": "A report for this AI response has already been submitted.",
"mobile.report.error.rateLimited": "Too many reports were sent recently. Try again later.",
"mobile.report.error.conflict": "This retry could not be verified. Close the form and start a new report.",
"mobile.report.error.network": "The report was not submitted. Check your connection and try again.",
"mobile.report.error.server": "The server did not confirm the report. Try again.",
"mobile.set.title": "Settings",
"mobile.set.accountPlan": "ACCOUNT & PLAN",
"mobile.set.backendConfig": "BACKEND CONFIG",
"mobile.set.preferences": "PREFERENCES",
"mobile.set.llmModel": "LLM Model",
"mobile.set.llmDesc": "AI processing backend",
"mobile.set.cloudStt": "Cloud STT",
"mobile.set.cloudSttDesc": "Google Cloud Speech",
"mobile.set.language": "Language",
"mobile.set.autoPolish": "Auto Polish",
"mobile.set.haptic": "Haptic Feedback",
"mobile.set.logout": "LOGOUT",
"mobile.set.logoutConfirm": "Are you sure you want to log out?",
"mobile.set.loggingOut": "Logging out...",
"mobile.set.openAccount": "Open account details",
"mobile.set.openAccountHint": "Go to profile, sign-in methods, password, and account deletion settings.",
"mobile.set.openPlans": "Open plans and rewards",
"mobile.set.openPlansHint": "Go to subscription plans and reward credits.",
"mobile.set.planAndRewards": "PRO plans and reward credits",
"mobile.set.userFallback": "User",
"mobile.set.edit": "EDIT",
"mobile.set.appearance": "APPEARANCE & LANGUAGE",
"mobile.set.theme": "Theme",
"mobile.set.themeDesc": "Follow the device setting or keep the app in light or dark mode.",
"mobile.set.languageDesc": "Choose the language used by the app's primary screens.",
"mobile.set.autoPolishDesc": "Use supported sentence polishing by default after transcription.",
"mobile.set.hapticDesc": "Use vibration feedback for supported controls.",
"mobile.set.automatic": "Automatic",
"mobile.set.cloudSttManagedDesc": "Mobile transcription is securely processed according to your account's server policy.",
"mobile.set.serverManaged": "SERVER MANAGED",
"mobile.set.replayTutorial": "Replay tutorial",
"mobile.set.replayTutorialDesc": "Review recording, transcription, sharing, import, and sync flows.",
"mobile.set.replayTutorialHint": "Open the guide without changing your completed setup state.",
"mobile.set.statusFooter": "D3RO MOBILE SETTINGS",
"mobile.set.tools": "TOOLS & AUTOMATION",
"mobile.dictionary.description": "Add names and technical terms to the server dictionary and sync them across devices.",
"mobile.commands.description": "Run verified commands on real input through authenticated Cloud AI.",
"mobile.devices.title": "CONNECTED DEVICES",
"mobile.devices.description": "Review mobile devices connected to this account and revoke remote access.",
"mobile.devices.errorTitle": "Device management error",
"mobile.devices.loadError": "Connected devices could not be loaded.",
"mobile.devices.retry": "Try again",
"mobile.devices.empty": "No registered devices.",
"mobile.devices.current": "CURRENT DEVICE",
"mobile.devices.active": "ACTIVE",
"mobile.devices.revoked": "REVOKED",
"mobile.devices.version": "App {{version}}",
"mobile.devices.lastSeen": "Last seen {{time}}",
"mobile.devices.revokeTitle": "Revoke device",
"mobile.devices.revokeConfirm": "Stop sessions and synchronization for {{name}}?",
"mobile.devices.revoke": "Revoke access",
"mobile.devices.revoking": "Revoking...",
"mobile.devices.revokeError": "Device access could not be revoked.",
"mobile.devices.remove": "Remove from list",
"mobile.devices.removeError": "The revoked device could not be removed.",
"mobile.set.adPrivacy": "Ad privacy",
"mobile.set.adPrivacyDesc": "Review Google UMP consent and change personalized-ad choices. Paid plans never request ads.",
"mobile.set.adPrivacyOpen": "Open ad privacy options",
"mobile.set.legal": "Legal and privacy",
"mobile.set.privacyPolicy": "Privacy policy",
"mobile.set.privacyPolicyHint": "Review how D3RO Voice handles and protects data.",
"mobile.set.termsOfService": "Terms of service",
"mobile.set.termsOfServiceHint": "Review terms for the service, subscriptions, and user content.",
"mobile.set.accountDeletion": "External account deletion",
"mobile.set.accountDeletionHint": "Open the deletion request path for when the app is unavailable.",
"mobile.set.adPrivacyRequired": "Privacy choice needs review",
"mobile.set.adPrivacyUnavailable": "The privacy options form is not available on this device or in this region.",
"mobile.theme.system": "System",
"mobile.theme.light": "Light",
"mobile.theme.dark": "Dark",
"mobile.preferences.syncTitle": "SETTINGS SYNC",
"mobile.preferences.statusLoading": "Loading settings",
"mobile.preferences.statusLocal": "Saved on this device",
"mobile.preferences.statusSaving": "Syncing to your account",
"mobile.preferences.statusSynced": "Synced with your account",
"mobile.preferences.statusOffline": "Saved offline",
"mobile.preferences.statusError": "Settings need attention",
"mobile.preferences.notSyncedYet": "There is no server sync record yet.",
"mobile.preferences.lastSynced": "Last synced at {{time}}",
"mobile.preferences.retry": "Retry sync",
"mobile.preferences.retrying": "Retrying...",
"mobile.preferences.saveFailedTitle": "Settings could not be saved",
"mobile.preferences.cacheReadError": "Saved settings could not be read on this device. Defaults are active and you can retry.",
"mobile.preferences.cacheWriteError": "Settings could not be saved on this device. Check available storage and try again.",
"mobile.preferences.syncError": "The account settings service could not be reached. Changes remain on this device and can be retried.",
"mobile.preferences.conflictError": "Settings changed repeatedly on another device. Load the latest settings and try again.",
"mobile.preferences.syncWarning": "Settings sync is delayed. Your changes remain safely stored on this device.",
"mobile.preferences.offlineSaved": "When the network returns, changes on this device will be synced with your account.",
"mobile.onboarding.accessibilityScreen": "D3RO Voice getting started tutorial",
"mobile.onboarding.setupLabel": "FIRST-RUN SETUP",
"mobile.onboarding.replayLabel": "TUTORIAL REPLAY",
"mobile.onboarding.languageLabel": "Tutorial language",
"mobile.onboarding.accountPathLabel": "Account starting path",
"mobile.onboarding.stepWelcome": "01 · START",
"mobile.onboarding.stepPrivacy": "02 · PRIVACY & PERMISSIONS",
"mobile.onboarding.stepWorkflow": "03 · RECORD TO SHARE",
"mobile.onboarding.stepExplore": "04 · EXPLORE THE APP",
"mobile.onboarding.stepPersonalize": "05 · PERSONALIZE",
"mobile.onboarding.welcomeTitle": "Turn speech into a record you can use",
"mobile.onboarding.welcomeBody": "D3RO Voice transcribes mobile recordings and audio files, then connects them to your Web and desktop account data.",
"mobile.onboarding.welcomeBulletRecord": "Record directly on your phone or choose a saved audio file.",
"mobile.onboarding.welcomeBulletSync": "Sign in with the same account to sync supported records and settings across devices.",
"mobile.onboarding.welcomeBulletAccount": "Start with a free account and manage your plan and account in Settings.",
"mobile.onboarding.existingUser": "Existing user",
"mobile.onboarding.existingUserDesc": "Sign in to your current D3RO account and load existing data.",
"mobile.onboarding.newUser": "New to D3RO",
"mobile.onboarding.newUserDesc": "Create an account with Google or email and begin with your first recording.",
"mobile.onboarding.privacyTitle": "Review permissions and cloud processing first",
"mobile.onboarding.privacyBody": "The app asks for access only when a feature needs it. Audio required for transcription and its results are processed within your signed-in account.",
"mobile.onboarding.privacyBulletPermission": "Microphone access is requested when recording starts. If declined, file import remains a separate option.",
"mobile.onboarding.privacyBulletCloud": "When cloud transcription is used, audio is sent through D3RO's authenticated processing path.",
"mobile.onboarding.privacyBulletControl": "Review and manage records, sync preferences, and account data in Settings.",
"mobile.onboarding.workflowTitle": "Record, review, and share",
"mobile.onboarding.workflowBody": "Work started in REC moves through a visible processing state and is saved in HISTORY. Review the result before sharing it with another app.",
"mobile.onboarding.workflowBulletRecord": "Choose microphone recording or audio file import in REC.",
"mobile.onboarding.workflowBulletTranscribe": "Follow processing status and errors, then retry failed work after reviewing the cause.",
"mobile.onboarding.workflowBulletShare": "Share text or an exported file from a completed transcript.",
"mobile.onboarding.exploreTitle": "Features are organized across tabs and Settings",
"mobile.onboarding.exploreBody": "DASH shows usage, HISTORY holds records, REC handles capture and import, TALK opens conversations, and SET manages your account and sync.",
"mobile.onboarding.exploreBulletTabs": "Use the bottom tabs to move between dashboard, history, recording, conversation, and settings.",
"mobile.onboarding.exploreBulletImport": "Import a file in REC and review its synced result in HISTORY.",
"mobile.onboarding.exploreBulletPlan": "Use SET to manage your account, plan, payments, and free rewards.",
"mobile.onboarding.personalizeTitle": "Choose your display and get started",
"mobile.onboarding.personalizeBody": "Choose system, light, or dark mode. After sign-in, your selection is synced to your account.",
"mobile.onboarding.personalizeBulletSystem": "System mode follows your phone when it switches between light and dark appearance.",
"mobile.onboarding.personalizeBulletSync": "If the network drops, changes stay on this device and sync again after reconnection.",
"mobile.onboarding.personalizeBulletReplay": "You can replay this tutorial from Settings at any time.",
"mobile.onboarding.themeLabel": "APP THEME",
"mobile.onboarding.back": "Back",
"mobile.onboarding.next": "Next",
"mobile.onboarding.skip": "Skip tutorial",
"mobile.onboarding.saving": "Saving...",
"mobile.onboarding.completeExisting": "Continue to sign in",
"mobile.onboarding.completeNew": "Continue to sign up",
"mobile.onboarding.backHint": "Move to the previous guide step.",
"mobile.onboarding.nextHint": "Move to the next guide step.",
"mobile.onboarding.completeHint": "Save the selected settings and continue to your account screen.",
"mobile.onboarding.skipHint": "Mark the tutorial as seen and continue to sign in. You can replay it from Settings.",
"mobile.login.title": "D3RO-VOICE",
"mobile.login.subtitle": "PRECISION VOICE INTELLIGENCE",
"mobile.login.google": "Sign in with Google",
"mobile.login.apple": "Sign in with Apple",
"mobile.login.github": "Sign in with GitHub",
"mobile.login.or": "or",
"mobile.login.email": "EMAIL",
"mobile.login.password": "PASSWORD",
"mobile.login.signIn": "Sign In",
"mobile.login.noAccount": "Don't have an account?",
"mobile.login.forgotPassword": "Forgot your password?",
"mobile.login.signUp": "Sign Up",
"mobile.login.notConfigured": "Supabase not configured. Set EXPO_PUBLIC_SUPABASE_URL in .env",
"mobile.auth.backToLogin": "Back to sign in",
"mobile.auth.notConfigured": "The authentication server is not configured.",
"mobile.auth.errorTitle": "Request failed",
"mobile.auth.successTitle": "Done",
"mobile.auth.emailInvalid": "Enter a valid email address.",
"mobile.auth.passwordMin": "Password must be at least 8 characters.",
"mobile.auth.passwordMismatch": "Passwords do not match.",
"mobile.auth.notConfiguredTitle": "Configuration required",
"mobile.auth.loginFailedTitle": "Sign-in failed",
"mobile.auth.oauthUrlFailed": "Could not create the OAuth sign-in URL.",
"mobile.auth.oauthFailed": "Could not complete OAuth sign-in.",
"mobile.auth.credentialsRequired": "Enter both your email and password.",
"mobile.auth.logoutFailed": "Could not complete logout safely. Try again.",
"mobile.auth.localDataCleanupTitle": "Device data protection required",
"mobile.auth.localDataCleanupBody": "Sign-in and app access are blocked because local data from the previous account could not be fully removed. Try again.",
"mobile.auth.localDataCleanupRetry": "Retry protected data cleanup",
"mobile.signup.title": "CREATE ACCOUNT",
"mobile.signup.subtitle": "Create your D3RO-VOICE account with Google or email",
"mobile.signup.google": "Sign up with Google",
"mobile.signup.googleLoading": "Connecting to Google...",
"mobile.signup.googleHint": "Securely create an account with Google or sign in to an existing account.",
"mobile.signup.orEmail": "or sign up with email",
"mobile.signup.name": "NAME",
"mobile.signup.namePlaceholder": "Your display name",
"mobile.signup.email": "EMAIL",
"mobile.signup.password": "PASSWORD",
"mobile.signup.confirmPassword": "CONFIRM PASSWORD",
"mobile.signup.terms": "I have read and agree to the Terms of Service and Privacy Policy.",
"mobile.signup.termsRequired": "Agree to the terms before creating an account.",
"mobile.signup.nameRequired": "Enter at least 2 characters for your name.",
"mobile.signup.submit": "Create account",
"mobile.signup.alreadyAccount": "Already have an account?",
"mobile.signup.signIn": "Sign in",
"mobile.signup.waitingTitle": "Check your email",
"mobile.signup.waitingBody": "We sent a confirmation email to {{email}}. Open its link to activate your account.",
"mobile.signup.resend": "Resend confirmation email",
"mobile.signup.resendIn": "Resend in {{seconds}}s",
"mobile.signup.resendSuccess": "A new confirmation email was sent.",
"mobile.signup.editEmail": "Edit email",
"mobile.signup.created": "Your account was created and signed in.",
"mobile.signup.existing": "That email is already registered. Sign in or reset your password instead.",
"mobile.signup.invalidResponse": "The authentication server did not return a valid user.",
"mobile.forgot.title": "RESET PASSWORD",
"mobile.forgot.subtitle": "Get a secure password reset link",
"mobile.forgot.send": "Send reset email",
"mobile.forgot.sentTitle": "Check your email",
"mobile.forgot.sentBody": "If an account exists, a password reset link will be sent to {{email}}.",
"mobile.forgot.resend": "Resend reset email",
"mobile.updatePassword.title": "NEW PASSWORD",
"mobile.updatePassword.subtitle": "Set a new password for your account",
"mobile.updatePassword.newPassword": "NEW PASSWORD",
"mobile.updatePassword.confirmPassword": "CONFIRM NEW PASSWORD",
"mobile.updatePassword.submit": "Update password",
"mobile.updatePassword.checking": "Checking the recovery session...",
"mobile.updatePassword.invalidLink": "There is no valid recovery session. Request a new reset email.",
"mobile.updatePassword.completed": "Password updated",
"mobile.updatePassword.completedBody": "Your new password is ready to use.",
"mobile.updatePassword.continue": "Continue",
"mobile.account.title": "ACCOUNT",
"mobile.account.profile": "PROFILE",
"mobile.account.accountInfo": "ACCOUNT INFO",
"mobile.account.displayName": "DISPLAY NAME",
"mobile.account.avatarUrl": "AVATAR URL",
"mobile.account.avatarPlaceholder": "https://example.com/avatar.png",
"mobile.account.locale": "LANGUAGE",
"mobile.account.save": "Save profile",
"mobile.account.saving": "Saving...",
"mobile.account.refresh": "Reload",
"mobile.account.loading": "Loading your profile...",
"mobile.account.nameInvalid": "Display name must be between 2 and 80 characters.",
"mobile.account.avatarInvalid": "Avatar URL must be empty or start with https:// or http://.",
"mobile.account.email": "EMAIL",
"mobile.account.provider": "SIGN-IN PROVIDER",
"mobile.account.joinedAt": "JOINED",
"mobile.account.lastLogin": "LAST SIGN-IN",
"mobile.account.tier": "PLAN",
"mobile.account.changePassword": "Change password",
"mobile.account.logout": "Log out",
"mobile.account.logoutConfirm": "Log out on this device?",
"mobile.account.dangerZone": "DANGER ZONE",
"mobile.account.deleteWarning": "Deleting your account permanently removes cloud data and cannot be undone. An active Google Play subscription is not cancelled automatically; cancel it separately in Google Play.",
"mobile.account.deleteAcknowledge": "I understand the impact of deletion.",
"mobile.account.delete": "Delete account",
"mobile.account.deleteConfirm": "Request permanent account deletion? Your Google Play subscription will remain active until you cancel it separately in Google Play.",
"mobile.account.deleteUnavailable": "The account deletion server endpoint is not available yet. Your account was not deleted.",
"mobile.account.loginRequired": "Sign in to view account details.",
"mobile.account.profileSaved": "Your profile was saved on the server.",
"mobile.account.profileMissing": "The server did not return your profile.",
"mobile.account.profileUpdateMissing": "The server did not return the updated profile.",
"mobile.account.reauthenticationRequired": "Sign in again before deleting your account.",
"mobile.account.deleteFailed": "The server did not confirm account deletion.",
"mobile.account.defaultName": "User",
"mobile.account.avatarPreview": "Profile photo for {{name}}",
"mobile.account.languageKorean": "Korean",
"mobile.account.languageEnglish": "English",
"mobile.account.identities": "CONNECTED SIGN-IN METHODS",
"mobile.account.identitiesHint": "Add a sign-in method to protect account access. Email and the method used for your current sign-in cannot be removed here.",
"mobile.account.identitiesLoading": "Checking sign-in methods...",
"mobile.account.identitiesUnavailable": "Your linked sign-in methods could not be verified safely.",
"mobile.account.identityProviderUnavailable": "No supported OAuth provider is configured for this app.",
"mobile.account.identityConnected": "Connected",
"mobile.account.identityEmail": "Email",
"mobile.account.identityGoogle": "Google",
"mobile.account.identityGitHub": "GitHub",
"mobile.account.identityApple": "Apple",
"mobile.account.identityEmailProtected": "Email sign-in cannot be removed here.",
"mobile.account.identityLastIdentityProtected": "Your last sign-in method cannot be removed.",
"mobile.account.identityLastLoginProtected": "The method used for this sign-in cannot be removed.",
"mobile.account.identityUnlink": "Unlink",
"mobile.account.identityUnlinkProvider": "Unlink {{provider}}",
"mobile.account.identityUnlinkTitle": "Unlink sign-in method",
"mobile.account.identityUnlinkConfirm": "Unlink {{provider}} from this account? This cannot be undone.",
"mobile.account.identityLinkProvider": "Link {{provider}} sign-in",
"mobile.account.identityLinkCancelled": "Sign-in method linking was cancelled.",
"mobile.account.identityLinkContinue": "Finish linking in your browser, then return to this screen.",
"mobile.account.identityLinked": "{{provider}} sign-in has been linked.",
"mobile.account.identityUnlinked": "{{provider}} sign-in has been unlinked.",
"mobile.account.identityLinkFailed": "Could not link the sign-in method. Your account was not changed.",
"mobile.account.identityUnlinkFailed": "Could not unlink the sign-in method. Your account was not changed.",
"mobile.account.identityReauthenticationRequired": "For your security, sign in again before managing sign-in methods.",
"mobile.account.identityAccountChanged": "The account changed, so the request was cancelled.",
"mobile.account.identityAlreadyLinked": "This sign-in method is already linked.",
"mobile.account.identityNotFound": "The linked sign-in method was not found. Reload and try again.",
"mobile.account.identityRequestFailed": "The sign-in method request could not be completed safely. Your account was not changed.",
"onboarding.title": "D3RO Voice Initial Setup",
"onboarding.subtitle": "Download the model required to use the voice assistant.",
"onboarding.llmModelMissing": "AI model ({{model}}) is not installed.",
"onboarding.llmModelSize": "Size: ~9.6GB — takes 10–30 min depending on network speed",
"onboarding.download": "Start Download",
"onboarding.cancel": "Later",
"onboarding.close": "Close",
"onboarding.downloading": "Downloading…",
"onboarding.status": "Status: {{status}}",
"onboarding.success": "Setup complete! You can now use the app.",
"onboarding.failed": "Download failed: {{message}}",
"onboarding.retry": "Retry",
"onboarding.statusPreparing": "Preparing download…",
"onboarding.statusVerifying": "Verifying integrity… (large models may take a few minutes)",
"onboarding.statusFinalizing": "Finalizing…",
"onboarding.sttModelMissing": "Speech recognition model ({{model}}) is not installed.",
"onboarding.sttModelSize": "Size: ~1.6GB — takes 2–10 min depending on network speed",
"onboarding.step": "Step {{current}}/{{total}}",
"onboarding.progressDetail": "{{downloaded}} / {{total}} MB",
"onboarding.ollamaNotRunning": "Ollama server is not running. Please retry shortly.",
"popup.commandSelect": "COMMAND SELECT",
"popup.hints.select": "↑↓ Select",
"popup.hints.apply": "⏎ Apply",
"popup.hints.clear": "0 Clear",
"popup.hints.close": "ESC ×",
"popup.noCommands": "No commands",
"popup.noCommand": "No command (insert original)",
"popup.hints.selectEn": "↑↓ Select",
"popup.hints.paste": "⏎ Paste",
"popup.noHistory": "No history yet",
"popup.time.justNow": "just now",
"popup.time.minutesAgo": "{{m}}m ago",
"popup.time.hoursAgo": "{{h}}h ago",
"popup.time.daysAgo": "{{d}}d ago",
"popup.copy": "Copy",
"popup.error.default": "An error occurred",
"popup.caption.loading": "Preparing the speech model…",
"mobile.paywall.title": "D3RO PRO & Rewards",
"mobile.paywall.close": "Close billing screen",
"mobile.paywall.currentPlan": "Current plan",
"mobile.paywall.free": "FREE",
"mobile.paywall.pro": "PRO",
"mobile.paywall.proPlus": "PRO+",
"mobile.paywall.currentCredits": "Cloud AI bonus credits",
"mobile.paywall.creditsUnit": "credits",
"mobile.paywall.rewardTitle": "Free-tier ad reward",
"mobile.paywall.rewardDescription": "50 credits are granted only after Google sends a signed server callback confirming completed viewing.",
"mobile.paywall.watchReward": "Watch rewarded ad",
"mobile.paywall.rewardLoading": "Preparing ad",
"mobile.paywall.rewardShowing": "Ad is playing",
"mobile.paywall.rewardVerifying": "Confirming server credit",
"mobile.paywall.rewardCredited": "The server confirmed a 50-credit grant.",
"mobile.paywall.rewardPending": "Viewing completed. Waiting for the signed server callback.",
"mobile.paywall.rewardClosed": "No credit was granted because viewing was not completed.",
"mobile.paywall.rewardUnavailable": "Rewarded ads are currently unavailable.",
"mobile.paywall.rewardRetry": "Prepare ad again",
"mobile.paywall.plans": "Google Play subscriptions",
"mobile.paywall.storeUnavailable": "No sellable plan was returned by Google Play. The app will not invent a price.",
"mobile.paywall.storeInstallRequired": "Purchases and restores require an app installed by Google Play. Sideloaded builds do not send billing requests.",
"mobile.paywall.storeRetry": "Reconnect to store",
"mobile.paywall.subscribe": "Subscribe to {{plan}} · {{price}}",
"mobile.paywall.changePlan": "Change to {{plan}} · {{price}}",
"mobile.paywall.current": "Current plan",
"mobile.paywall.manage": "Manage or cancel subscription",
"mobile.paywall.restore": "Restore purchases and reverify on server",
"mobile.paywall.processing": "Google Play is processing",
"mobile.paywall.pending": "Payment is pending. The server applies access after approval.",
"mobile.paywall.success": "Store purchase and server entitlement are synchronized.",
"mobile.paywall.cancelled": "Purchase was cancelled.",
"mobile.paywall.error": "Billing could not be completed. Error code: {{code}}",
"mobile.paywall.billingNotice": "Subscriptions are billed by Google Play and follow its renewal and cancellation policy. Only server-verified and acknowledged purchases grant access.",
"mobile.paywall.terms": "Terms of Service",
"mobile.paywall.privacy": "Privacy Policy",
"mobile.paywall.proFeature1": "No ads",
"mobile.paywall.proFeature2": "Mobile, web, and desktop history sync",
"mobile.paywall.proFeature3": "Expanded Cloud AI allowance",
"mobile.paywall.proFeature4": "Meeting summaries and multilingual transcription",
"mobile.paywall.proPlusFeature1": "Everything in PRO",
"mobile.paywall.proPlusFeature2": "Highest Cloud AI allowance",
"mobile.paywall.proPlusFeature3": "Priority processing queue",
"mobile.paywall.proPlusFeature4": "Advanced diarization and analysis",
"mobile.meetings.title": "Meetings",
"mobile.meetings.description": "Manage synchronized meetings, transcripts, memos, and documents.",
"mobile.meetings.detail": "Meeting details",
"mobile.meetings.count": "{{count}} meetings",
"mobile.meetings.search": "Search meeting titles",
"mobile.meetings.create": "New meeting",
"mobile.meetings.createTitle": "Create meeting workspace",
"mobile.meetings.createNotice": "This creates a synchronized meeting workspace. Audio recording must be started after the REC flow is connected.",
"mobile.meetings.editTitle": "Edit meeting title",
"mobile.meetings.titleLabel": "Meeting title",
"mobile.meetings.titlePlaceholder": "Enter a meeting title",
"mobile.meetings.save": "Save",
"mobile.meetings.saving": "Saving",
"mobile.meetings.edit": "Edit",
"mobile.meetings.delete": "Delete",
"mobile.meetings.deleting": "Deleting",
"mobile.meetings.deleteTitle": "Delete meeting",
"mobile.meetings.deleteBody": "This deletes the meeting and its transcripts, memos, and documents. This action cannot be undone.",
"mobile.meetings.retry": "Try again",
"mobile.meetings.reloadLatest": "Load latest",
"mobile.meetings.loading": "Loading meetings",
"mobile.meetings.empty": "No synchronized meetings yet.",
"mobile.meetings.emptySearch": "No meetings match this search.",
"mobile.meetings.untitled": "Untitled meeting",
"mobile.meetings.personal": "Personal meeting",
"mobile.meetings.team": "Team meeting",
"mobile.meetings.back": "Back",
"mobile.meetings.duration": "Duration",
"mobile.meetings.statusRecording": "Recording",
"mobile.meetings.statusProcessing": "Processing",
"mobile.meetings.statusCompleted": "Completed",
"mobile.meetings.statusError": "Error",
"mobile.meetings.transcript": "Transcript",
"mobile.meetings.transcriptEmpty": "No transcript has been stored.",
"mobile.meetings.edited": "Edited",
"mobile.meetings.summary": "Summary and minutes",
"mobile.meetings.summaryEmpty": "No summary or minutes have been generated.",
"mobile.meetings.generationUnavailable": "Select a meeting-document template to generate a document from the transcript.",
"mobile.meetings.memos": "Memos",
"mobile.meetings.memosEmpty": "No memos have been saved.",
"mobile.meetings.memoPlaceholder": "Enter a meeting memo",
"mobile.meetings.memoAdd": "Save memo",
"mobile.meetings.memoEditTitle": "Edit memo",
"mobile.meetings.memoDeleteTitle": "Delete memo",
"mobile.meetings.memoDeleteBody": "Delete this memo?",
"mobile.meetings.documents": "Documents",
"mobile.meetings.documentsEmpty": "No meeting documents have been generated.",
"mobile.meetings.documentTemplateMissing": "No meeting-document template is selected.",
"mobile.meetings.documentTemplateSelected": "Selected template · {{name}}",
"mobile.meetings.manageTemplates": "Manage templates",
"mobile.meetings.generateDocument": "Generate document",
"mobile.meetings.generatingDocument": "Generating document",
"mobile.meetings.documentEditTitle": "Edit document",
"mobile.meetings.documentContent": "Document content",
"mobile.meetings.documentDeleteTitle": "Delete document",
"mobile.meetings.documentDeleteBody": "Delete this document?",
"mobile.meetings.realtimeWaiting": "Waiting for realtime updates. Pull down to check the server again.",
"mobile.meetings.conflictNotice": "The content changed on another device. Close the editor, load the latest version, and retry.",
"mobile.meetings.loginRequired": "Sign in to view meetings.",
"mobile.meetings.errorConflict": "The content changed or was removed on another device.",
"mobile.meetings.errorForbidden": "You do not have permission to change this item.",
"mobile.meetings.errorNetwork": "Check your network connection and try again.",
"mobile.meetings.errorNotFound": "The meeting was not found or is not accessible.",
"mobile.meetings.errorValidation": "Check the input. Titles must be 1–160 characters and memos 1–4000 characters.",
"mobile.meetings.errorServer": "The meeting request could not be completed.",
"mobile.meetings.recordNow": "RECORD THIS MEETING",
"mobile.meetings.recordAgain": "RECORD AGAIN",
"mobile.meetings.processingAudio": "AUDIO PROCESSING",
"mobile.meetings.export": "Export meeting",
"mobile.meetings.exportDescription": "Share the transcript, minutes, memos, and documents as a portable meeting file.",
"mobile.meetings.exportMarkdown": "SHARE MARKDOWN",
"mobile.meetings.exportText": "SHARE TEXT",
"mobile.meetings.exportPdf": "SHARE PDF",
"mobile.meetings.exportDocx": "SHARE DOCX",
"mobile.meetings.exporting": "PREPARING...",
"mobile.meetings.exportShareTitle": "Share D3RO meeting",
"mobile.meetings.exportFailed": "The meeting export could not be prepared or shared.",
"common.retry": "Try again",
"common.saving": "Saving",
"mobile.teams.title": "Teams",
"mobile.teams.description": "Securely manage team members, invitations, and shared meetings.",
"mobile.teams.detailTitle": "Team details",
"mobile.teams.create": "New team",
"mobile.teams.creating": "Creating",
"mobile.teams.createTitle": "Create a team",
"mobile.teams.nameLabel": "Team name",
"mobile.teams.namePlaceholder": "Enter a team name",
"mobile.teams.loading": "Loading teams",
"mobile.teams.empty": "You have no teams yet. Create one or open an invitation link.",
"mobile.teams.openLabel": "Open {{name}} team",
"mobile.teams.memberCount": "{{count}} members",
"mobile.teams.role.owner": "Owner",
"mobile.teams.role.admin": "Admin",
"mobile.teams.role.member": "Member",
"mobile.teams.members": "Members",
"mobile.teams.you": "(you)",
"mobile.teams.unnamedMember": "Unnamed member",
"mobile.teams.invite": "Invite member",
"mobile.teams.inviteTitle": "Invite a member",
"mobile.teams.emailLabel": "Invite email",
"mobile.teams.emailPlaceholder": "member@example.com",
"mobile.teams.adminInviteOwnerOnly": "Only the team owner can invite an administrator.",
"mobile.teams.createInvite": "Create invitation",
"mobile.teams.inviteCreated": "The invitation link is ready.",
"mobile.teams.emailSent": "The invitation email was also sent.",
"mobile.teams.shareManually": "Email delivery is not configured. Share the link using the button below.",
"mobile.teams.share": "Share invitation link",
"mobile.teams.inviteShareTitle": "Invitation to {{team}}",
"mobile.teams.inviteShareMessage": "You are invited to the {{team}} team. Accept the invitation here: {{url}}",
"mobile.teams.pendingInvites": "Pending invitations",
"mobile.teams.noPendingInvites": "There are no pending invitations.",
"mobile.teams.expires": "Expires {{time}}",
"mobile.teams.expired": "Expired",
"mobile.teams.cancelInvite": "Cancel invite",
"mobile.teams.makeAdmin": "Make admin",
"mobile.teams.makeMember": "Make member",
"mobile.teams.remove": "Remove",
"mobile.teams.removeTitle": "Remove team member",
"mobile.teams.removeBody": "Remove {{name}} from this team?",
"mobile.teams.sharedMeetings": "Shared meetings",
"mobile.teams.noSharedMeetings": "There are no meetings shared with this team.",
"mobile.teams.management": "Team management",
"mobile.teams.rename": "Rename team",
"mobile.teams.renameTitle": "Rename team",
"mobile.teams.leave": "Leave team",
"mobile.teams.leaving": "Leaving",
"mobile.teams.leaveTitle": "Leave team",
"mobile.teams.leaveBody": "You will lose access to shared meetings and team resources.",
"mobile.teams.delete": "Delete team",
"mobile.teams.deleting": "Deleting",
"mobile.teams.deleteTitle": "Permanently delete team",
"mobile.teams.deleteBody": "This permanently deletes the team, invitations, and memberships. Shared meetings will be detached. This cannot be undone.",
"mobile.teams.realtimeWaiting": "Waiting for realtime sync. Pull down to verify the latest server state.",
"mobile.teams.activity": "Activity",
"mobile.teams.activityPlaceholder": "Leave a note for the team...",
"mobile.teams.post": "Post",
"mobile.teams.posting": "Posting...",
"mobile.teams.noActivity": "No activity yet.",
"mobile.teams.system": "System",
"mobile.teams.acceptTitle": "Team invitation",
"mobile.teams.inviteLoading": "Checking invitation link",
"mobile.teams.loginToAccept": "Sign in before accepting this invitation.",
"mobile.teams.inviteSavedSecurely": "The invitation was stored securely on this device so you can continue after signing in.",
"mobile.teams.acceptDescription": "Accepting gives you access to this team's shared resources.",
"mobile.teams.acceptingAs": "Current account: {{email}}",
"mobile.teams.unknownAccount": "No email",
"mobile.teams.accept": "Accept invitation",
"mobile.teams.accepting": "Accepting invitation",
"mobile.teams.accepted": "You joined the team as {{role}}.",
"mobile.teams.alreadyMember": "You are already a member of this team.",
"mobile.teams.openTeam": "Open team",
"mobile.teams.wrongAccountHint": "The current {{email}} account does not match the invitation. Sign out and use the invited account.",
"mobile.teams.error.auth": "Sign in to use team features.",
"mobile.teams.error.conflict": "The team changed on another device. Reload the latest state and try again.",
"mobile.teams.error.duplicate": "You already joined or there is an active invitation for this email.",
"mobile.teams.error.emailMismatch": "This invitation cannot be accepted by the currently signed-in account.",
"mobile.teams.error.expired": "This invitation has expired. Ask a team administrator for a new one.",
"mobile.teams.error.forbidden": "You do not have permission to perform this team action.",
"mobile.teams.error.invalidToken": "This team invitation link is invalid.",
"mobile.teams.error.network": "Check your network connection and try again.",
"mobile.teams.error.notFound": "The team or invitation was not found, or you cannot access it.",
"mobile.teams.error.rateLimited": "Too many invitations were created. Wait before trying again.",
"mobile.teams.error.serverContract": "The team server feature is not deployed. The app will not report false success.",
"mobile.teams.error.validation": "Check the input. Team names must be 1–80 characters and invitations need a valid email.",
"mobile.teams.error.server": "The team request could not be completed.",
"mobile.notifications.title": "Notifications",
"mobile.notifications.description": "Manage notification permission and secure server registration for this device.",
"mobile.notifications.delivery": "Notification delivery",
"mobile.notifications.statusRegistered": "Registered",
"mobile.notifications.statusConfigurationRequired": "Configuration required",
"mobile.notifications.statusPermissionRequired": "Permission required",
"mobile.notifications.statusBlocked": "Blocked by system",
"mobile.notifications.statusNotRegistered": "Registration pending",
"mobile.notifications.firebaseConfigured": "Firebase Cloud Messaging is configured. The registration identifier is bound only to this device and account.",
"mobile.notifications.firebaseMissing": "The Firebase Android configuration file is missing, so real push registration is stopped. No fake development token or fake delivery is used.",
"mobile.notifications.fullSyncRequired": "Some messages may have been dropped while this device was offline. History, teams, and subscription state must be fully synchronized from the server.",
"mobile.notifications.allow": "Allow notifications",
"mobile.notifications.requestingPermission": "Requesting permission",
"mobile.notifications.openSettings": "Open system settings",
"mobile.notifications.register": "Register this device",
"mobile.notifications.registering": "Registering",
"mobile.notifications.registeredAt": "Last server registration {{time}}",
"mobile.notifications.privacyTitle": "Privacy",
"mobile.notifications.privacyBody": "Push messages never contain transcript text, team names, or raw billing status. The server sends only allowlisted events and internal identifiers, and the app validates the shape again.",
"mobile.notifications.recentTitle": "Received this session",
"mobile.notifications.recentEmpty": "No notifications have arrived since the app opened.",
"mobile.notifications.recentSessionOnly": "This list is cleared when the app closes so sensitive notification content is not stored separately.",
"mobile.notifications.event.transcription": "Your transcription is ready",
"mobile.notifications.event.teamInvite": "A new team invitation arrived",
"mobile.notifications.event.billing": "Your subscription status changed",
"mobile.notifications.error.native": "The device notification service returned invalid data.",
"mobile.notifications.error.server-contract": "The secure push registration server feature is not deployed.",
"mobile.notifications.error.server": "The notification registration status could not be verified.",
"mobile.portability.title": "DATA PORTABILITY",
"mobile.portability.description": "Download, restore, and share your account data without exporting raw audio or credentials.",
"mobile.portability.securityTitle": "SAFE BY DEFAULT",
"mobile.portability.securityBody": "Every archive is versioned, owner-scoped, and SHA-256 verified again by the server. Restore only creates missing rows; conflicting cloud revisions abort the entire import.",
"mobile.portability.exportTitle": "ACCOUNT EXPORT",
"mobile.portability.exportJson": "Share full JSON archive",
"mobile.portability.exportDictionaryCsv": "Share dictionary CSV",
"mobile.portability.exportDictionaryTxt": "Share dictionary TXT",
"mobile.portability.exportHistoryCsv": "Share history CSV",
"mobile.portability.exportSummaryTxt": "Share account summary",
"mobile.portability.importTitle": "RESTORE FROM FILE",
"mobile.portability.importBody": "Supports D3RO JSON, desktop dictionary JSON/CSV/TXT, plain TXT, and desktop meeting Markdown. Foreign-owner and damaged files are rejected before any write.",
"mobile.portability.importFile": "Choose and restore file",
"mobile.portability.working": "Verifying with the server",
"mobile.portability.loginRequired": "Sign in to export or restore account data.",
"mobile.portability.exportSuccess": "Export prepared: {{count}} rows",
"mobile.portability.importSuccess": "Restored {{imported}} rows; skipped {{skipped}} safe duplicates.",
"mobile.portability.importDuplicate": "This exact archive was already restored. No rows were changed.",
"mobile.portability.exclusions": "Not included: raw audio, Storage objects, payment credentials, and push tokens.",
"mobile.portability.error.auth": "The active session does not match this account. Sign in again.",
"mobile.portability.error.cancelled": "File selection was cancelled.",
"mobile.portability.error.checksum": "The file checksum is invalid. Nothing was restored.",
"mobile.portability.error.conflict": "Cloud data changed or differs from this archive. The full restore was rolled back.",
"mobile.portability.error.file": "The file could not be read or shared safely.",
"mobile.portability.error.format": "The selected file format or schema is invalid.",
"mobile.portability.error.network": "Connect to the internet and retry. Cloud restore never writes offline.",
"mobile.portability.error.owner": "This file belongs to a different account.",
"mobile.portability.error.server": "The server could not complete the data portability request.",
"mobile.portability.error.size": "The selected file exceeds the safe size or row limit.",
"mobile.meetings.attendeesLabel": "Attendees",
"mobile.meetings.attendeesPlaceholder": "Enter one attendee name or email per line",
"mobile.meetings.attendeesHint": "Separate attendees with commas or line breaks. Up to 50 are stored.",
"mobile.meetings.languageLabel": "Meeting language",
"mobile.meetings.language.ko": "Korean",
"mobile.meetings.language.en": "English",
"mobile.meetings.language.ja": "Japanese",
"mobile.meetings.language.zh-cn": "Chinese",
"mobile.meetings.templateLabel": "Meeting document template",
"mobile.meetings.templateLoading": "Synchronizing templates",
"mobile.meetings.templateEmpty": "No meeting document templates available. You can start the meeting without one.",
"mobile.meetings.templateLoadError": "Meeting document templates could not be loaded.",
"mobile.meetings.templateCustom": "Custom template",
"mobile.templates.title": "Templates",
"mobile.templates.description": "Sync dictation and meeting-document formats across your devices.",
"mobile.templates.kind.dictation": "Dictation",
"mobile.templates.kind.meetingDocument": "Meeting documents",
"mobile.templates.search": "Search templates",
"mobile.templates.add": "New template",
"mobile.templates.addTitle": "Create template",
"mobile.templates.editTitle": "Edit template",
"mobile.templates.name": "Name",
"mobile.templates.descriptionLabel": "Description",
"mobile.templates.fields": "Input fields",
"mobile.templates.fieldNumber": "Field {{number}}",
"mobile.templates.fieldId": "Field key",
"mobile.templates.fieldLabel": "Display label",
"mobile.templates.fieldPrompt": "Voice prompt",
"mobile.templates.required": "Required",
"mobile.templates.durationSeconds": "Maximum seconds",
"mobile.templates.addField": "Add field",
"mobile.templates.removeField": "Remove field",
"mobile.templates.outputFormat": "Output format · use {{field_key}}",
"mobile.templates.systemPrompt": "Document generation instructions",
"mobile.templates.builtin": "Builtin",
"mobile.templates.selected": "Selected",
"mobile.templates.select": "Select",
"mobile.templates.selecting": "Selecting",
"mobile.templates.edit": "Edit",
"mobile.templates.delete": "Delete",
"mobile.templates.deleteTitle": "Delete template",
"mobile.templates.deleteBody": "Delete the ‘{{name}}’ template? If it is selected, the safe builtin will be selected instead.",
"mobile.templates.fieldCount": "{{count}} input fields",
"mobile.templates.documentType": "Document type · {{type}}",
"mobile.templates.loading": "Loading cloud templates",
"mobile.templates.saving": "Saving",
"mobile.templates.empty": "There are no templates of this type.",
"mobile.templates.emptySearch": "No templates match this search.",
"mobile.templates.realtimeWaiting": "Waiting for realtime sync. Pull down to verify the latest server state.",
"mobile.templates.error.auth": "Sign in to use templates.",
"mobile.templates.error.builtin": "Builtin templates cannot be edited or deleted.",
"mobile.templates.error.conflict": "This template changed on another device. Reload the latest version before trying again.",
"mobile.templates.error.forbidden": "You do not have permission to perform this template action.",
"mobile.templates.error.inProgress": "The same document generation request is already being processed.",
"mobile.templates.error.network": "Check your network connection and try again.",
"mobile.templates.error.notFound": "The template or meeting was not found, or you cannot access it.",
"mobile.templates.error.provider": "The document provider did not respond. No result or usage was committed.",
"mobile.templates.error.quota": "You have used all document generations available for this period.",
"mobile.templates.error.validation": "Check the name, fields, output format, or generation instructions.",
"mobile.templates.error.server": "The template operation could not be completed.",
"mobile.memos.title": "Memo tags",
"mobile.memos.description": "Organize history with tags, search it, and share it safely.",
"mobile.memos.search": "Search content, titles, or tags",
"mobile.memos.allTags": "All tags",
"mobile.memos.tags": "Memo tags",
"mobile.memos.addTag": "Add tag",
"mobile.memos.tagPlaceholder": "Tag name",
"mobile.memos.removeTagLabel": "Remove the {{tag}} tag",
"mobile.memos.renameTagLabel": "Rename the {{tag}} tag",
"mobile.memos.renameTitle": "Rename tag",
"mobile.memos.renameBody": "Apply a new name to every history item using ‘{{tag}}’. Duplicate tags are merged safely.",
"mobile.memos.share": "Share",
"mobile.memos.shareTitle": "D3RO Voice memo",
"mobile.memos.untitled": "Untitled memo",
"mobile.memos.loading": "Synchronizing memo tags",
"mobile.memos.saving": "Saving",
"mobile.memos.empty": "There is no history available to tag.",
"mobile.memos.emptySearch": "No memos match this search or tag filter.",
"mobile.memos.realtimeWaiting": "Waiting for realtime tag sync. Pull down to verify the latest state.",
"mobile.memos.error.auth": "Sign in to use memo tags.",
"mobile.memos.error.conflict": "Tags changed on another device. Reload the latest state and try again.",
"mobile.memos.error.network": "Check your network connection and try again.",
"mobile.memos.error.notFound": "The history item or tag was not found.",
"mobile.memos.error.validation": "Tags must contain 1–80 non-blank characters.",
"mobile.memos.error.server": "The memo tag operation or share could not be completed.",
"mobile.admin.title": "Mobile administration",
"mobile.admin.description": "Current server role: {{role}} · Every read and mutation is reauthorized by the server.",
"mobile.admin.forbiddenTitle": "Administrator access required",
"mobile.admin.forbiddenBody": "This account no longer has a server-side administrator role. Sign in again if your access changed.",
"mobile.admin.tab.users": "Users",
"mobile.admin.tab.subscriptions": "Subscriptions",
"mobile.admin.tab.audit": "Audit log",
"mobile.admin.searchUsers": "Search by name or user ID",
"mobile.admin.loading": "Verifying administrator data with the server",
"mobile.admin.empty": "There is no real server data to display.",
"mobile.admin.loadingMore": "Loading more",
"mobile.admin.loadMore": "Load more",
"mobile.admin.unnamedUser": "Unnamed user",
"mobile.admin.userMeta": "{{tier}} · joined {{date}}",
"mobile.admin.userDetail": "User administration",
"mobile.admin.accountSection": "Account",
"mobile.admin.name": "Name",
"mobile.admin.email": "Email",
"mobile.admin.roleLabel": "Role",
"mobile.admin.locale": "Locale",
"mobile.admin.createdAt": "Created",
"mobile.admin.lastSignIn": "Last sign-in",
"mobile.admin.changeRole": "Change role",
"mobile.admin.subscriptionSection": "Subscription",
"mobile.admin.noSubscription": "There is no active subscription row.",
"mobile.admin.tierLabel": "Tier",
"mobile.admin.statusLabel": "Status",
"mobile.admin.provider": "Payment provider",
"mobile.admin.overageCredits": "Overage credits",
"mobile.admin.periodEnd": "Current period end",
"mobile.admin.adminNote": "Administrator note",
"mobile.admin.createSubscription": "Create subscription",
"mobile.admin.editSubscription": "Edit subscription",
"mobile.admin.deleteSubscription": "Delete subscription",
"mobile.admin.paymentSection": "Payment audit ledger",
"mobile.admin.liveProviderUnavailable": "Raw live provider history is unavailable without a safe server contract. Only verified internal events and operation ledgers are shown.",
"mobile.admin.providerOperations": "Provider operations",
"mobile.admin.providerEvents": "Provider events",
"mobile.admin.noPaymentEvents": "There are no recorded payment entries.",
"mobile.admin.auditSection": "Change audit",
"mobile.admin.noAudit": "There are no recorded administrator changes.",
"mobile.admin.deleteSubscriptionWarning": "This atomically removes the user's subscription row and its linked tier state.",
"mobile.admin.mutationWarning": "The server rechecks your current role and records this operation in the audit log.",
"mobile.admin.periodEndInput": "Period end (ISO date, optional)",
"mobile.admin.periodEndUpdateHint": "Keep the current value to preserve the date. This server contract cannot clear only the date.",
"mobile.admin.memo": "Reason for change (required, 3+ characters)",
"mobile.admin.retrySameOperation": "A lost response is retried only with the same idempotency key. Close this dialog to start a different operation.",
"mobile.admin.closeFailedOperation": "This error cannot be retried safely. Close the dialog, reload the latest state, and start a new operation.",
"mobile.admin.saving": "Applying the operation atomically",
"mobile.admin.confirmMutation": "Confirm and apply",
"mobile.admin.role.user": "User",
"mobile.admin.role.manager": "Manager",
"mobile.admin.role.admin": "Administrator",
"mobile.admin.role.super_admin": "Super administrator",
"mobile.admin.tier.free": "FREE",
"mobile.admin.tier.pro": "PRO",
"mobile.admin.tier.pro_plus": "PRO+",
"mobile.admin.status.active": "Active",
"mobile.admin.status.canceled": "Canceled",
"mobile.admin.status.past_due": "Past due",
"mobile.admin.status.expired": "Expired",
"mobile.admin.error.auth": "The administrator session could not be verified. Sign in again.",
"mobile.admin.error.forbidden": "The server rejected your current administrator access.",
"mobile.admin.error.notFound": "The target user or subscription was not found.",
"mobile.admin.error.conflict": "This conflicts with another administrator operation, or the idempotency key was reused for different input. Reload the latest state.",
"mobile.admin.error.validation": "Check the input, change reason, or period format.",
"mobile.admin.error.network": "Check your network connection, then retry the same operation.",
"mobile.admin.error.timeout": "The server timed out. You can retry with the same idempotency key.",
"mobile.admin.error.unavailable": "The safe server contract for this administrator feature is not deployed.",
"mobile.admin.error.server": "The server response could not be verified safely, so the operation was stopped.",
"mobile.works.title": "WORKS",
"mobile.works.count": "{{count}} features",
"mobile.works.searchPlaceholder": "Search features",
"mobile.works.pinned": "PINNED",
"mobile.works.pin": "Pin to top",
"mobile.works.unpin": "Unpin",
"mobile.works.emptySearch": "No matching features.",
"mobile.works.section.meetings": "Meeting work",
"mobile.works.section.team": "Team & knowledge",
"mobile.works.section.data": "Data & alerts",
"mobile.works.historyDescription": "Search and manage transcripts from recordings and imports.",
"mobile.meetings.templateNone": "Start without template",
"mobile.meetings.templateNoneDesc": "Pick a template later when generating documents",
"keybinding.mouse.left": "Left Mouse Button",
"keybinding.mouse.right": "Right Mouse Button",
"keybinding.mouse.middle": "Middle Mouse Button",
"keybinding.mouse.back": "Mouse Back Button",
"keybinding.mouse.forward": "Mouse Forward Button",
"keybinding.group.mouse": "Mouse",
"keybinding.group.modifier": "Modifiers",
"keybinding.group.function": "Function Keys",
"keybinding.group.letter": "Letters",
"keybinding.group.digit": "Digits",
"keybinding.group.numpad": "Numpad",
"keybinding.group.navigation": "Navigation",
"keybinding.group.editing": "Editing",
"keybinding.group.punctuation": "Punctuation",
"keybinding.group.system": "System",
"keybinding.action.dictation": "Dictation",
"keybinding.action.dictation.desc": "Records while the key is held down.",
"keybinding.action.handsFree": "One-Touch Mode",
"keybinding.action.handsFree.desc": "Press twice to toggle.",
"keybinding.action.command": "Voice Commands",
"keybinding.action.command.desc": "Runs a command by voice.",
"keybinding.action.caption": "Live Caption",
"keybinding.action.caption.desc": "Turns live captions on and off.",
"keybinding.action.historyPopup": "History Popup",
"keybinding.action.historyPopup.desc": "Opens the history popup.",
"keybinding.action.commandPopup": "Command Popup",
"keybinding.action.commandPopup.desc": "Opens the command popup.",
"keybinding.reject.unknownKey": "This key is not supported",
"keybinding.reject.systemReserved": "This is a reserved system shortcut",
"keybinding.reject.modifierRequired": "Must be combined with a modifier (Ctrl/Alt/Shift)",
"keybinding.disabled.mouseLeft": "Left click is used for every on-screen interaction, so it cannot be bound",
"keybinding.warning.mousePassthrough": "Mouse buttons also keep performing their original action",
"keybinding.ui.add": "Add",
"keybinding.ui.remove": "Remove",
"keybinding.ui.reset": "Reset to Default",
"keybinding.ui.tabRecord": "Press a Key",
"keybinding.ui.tabList": "Choose from List",
"keybinding.ui.search": "Search keys",
"keybinding.ui.searchEmpty": "No matching keys",
"keybinding.ui.pressKeys": "Press the key or mouse button you want",
"keybinding.ui.noBindings": "No shortcut set",
"keybinding.ui.conflictWith": "Conflicts with {{action}}",
"keybinding.ui.modifiers": "Modifiers",
"keybinding.ui.selectedKey": "Selected key",
"keybinding.ui.sectionVoice": "Voice",
"keybinding.ui.sectionWindow": "Windows / Popups",
"keybinding.ui.duplicate": "This shortcut has already been added",
"keybinding.ui.holdMode": "Hold",
"keybinding.ui.doublePress": "Double-press",
"keybinding.ui.pickerTitle": "Set Shortcut",
"keybinding.ui.pressToRecord": "Press to start recording",
"keybinding.ui.recordHint": "Enter a combination (e.g. Ctrl+Shift+Q) or a single key (e.g. F5)",
"keybinding.ui.recordAgain": "Clear",
"keybinding.ui.saveFailed": "The shortcut could not be saved",
"keybinding.ui.globalEnabled": "Enable global shortcuts",
"input.tab": "Input",
"input.consent.title": "Input data collection",
"input.consent.description": "Optional. We count keystrokes and clicks and measure how far the mouse travels so you can see your own typing patterns. Which keys you press is never stored.",
"input.consent.collect": "Collect keyboard and mouse statistics",
"input.consent.running": "Collecting now.",
"input.consent.stopped": "Collection is off. Nothing is recorded.",
"input.consent.pause": "Pause collection",
"input.consent.learnText": "Learn the text I type",
"input.consent.learnTextHint": "Reads the focused text field to learn your phrasing. Password fields are always skipped.",
"input.consent.excludedApps": "Excluded apps",
"input.consent.excludedAppsPlaceholder": "keepassxc.exe, 1password.exe",
"input.consent.excludedAppsHint": "Comma-separated executable names. Nothing is read or counted in these apps.",
"input.consent.clearAll": "Delete collected data",
"input.suggestion.title": "Next-sentence suggestions",
"input.suggestion.description": "Predicts the sentence you are about to write and shows it next to your caret. Accept to insert it.",
"input.suggestion.enabled": "Show suggestions while typing",
"input.suggestion.modelReady": "Local model ready.",
"input.suggestion.modelMissing": "Local model is not running — suggestions stay off.",
"input.suggestion.delay": "Delay (ms)",
"input.suggestion.minPrefix": "Min. characters",
"input.suggestion.modelDefault": "Use default model",
"input.suggestion.overlayInteractive": "Allow clicking the suggestion box",
"input.suggestion.overlayVisible": "Suggestion is on screen",
"input.suggestion.keyHint": "Accept, cycle and dismiss are global key bindings — change them in Settings > Shortcuts.",
"input.suggestion.requestNow": "Suggest now",
"input.suggestion.usage": "{{requests}} of {{budget}} requests used today",
"input.suggestion.lastSkip": "Last skipped: {{reason}}",
"input.insights.title": "Last {{days}} days",
"input.insights.keystrokes": "Keystrokes",
"input.insights.clicks": "Clicks",
"input.insights.words": "Words typed",
"input.insights.sentences": "Sentences",
"input.insights.mouseDistance": "Mouse travel",
"input.insights.perDayMeters": " m/day",
"input.insights.phrases": "Personal phrases",
"input.insights.empty": "No activity collected yet.",
"input.insights.topApps": "Where you type most",
"input.insights.appRow": "{{keystrokes}} keys · {{clicks}} clicks",
"input.insights.privacyNote": "Only counters and distances are stored on this device. Key contents are never saved.",
"input.phrases.title": "Personal phrases",
"input.phrases.description": "Sentences learned from your typing and dictation, used to match your wording.",
"input.phrases.empty": "Nothing learned yet.",
"input.phrases.delete": "Delete phrase",
"input.feedback.excludedSaved": "Exclusions saved.",
"input.feedback.cleared": "Collected data deleted.",
"popup.suggestion.hintAccept": "Accept",
"popup.suggestion.hintNext": "Next",
"popup.suggestion.hintDismiss": "Dismiss",
"popup.suggestion.hintMove": "Move",
"popup.suggestion.loading": "Generating…",
"keybinding.ui.sectionInput": "Input suggestions",
"keybinding.action.suggestionAccept": "Accept suggestion",
"keybinding.action.suggestionAccept.desc": "Insert the suggested sentence into the focused app.",
"keybinding.action.suggestionNext": "Next suggestion",
"keybinding.action.suggestionNext.desc": "Cycle to the next suggestion candidate.",
"keybinding.action.suggestionDismiss": "Dismiss suggestion",
"keybinding.action.suggestionDismiss.desc": "Hide the current suggestion.",
"input.suggestion.timeout": "Response limit (ms)",
"input.suggestion.latency": "Last response: {{ms}} ms",
"input.suggestion.slowWarning": "Slower than a typing-speed suggestion — try a smaller model or fewer candidates.",
"input.diagnostics.title": "Live check",
"input.diagnostics.app": "Focused app: {{app}}",
"input.diagnostics.unknownApp": "(unknown)",
"input.diagnostics.noSnapshot": "No field read yet — click into a text field and type.",
"input.diagnostics.readable": "Field is readable ({{source}}, {{length}} chars) — suggestions can run.",
"input.diagnostics.notReadable": "This app does not expose its text field — typing here cannot be read, so no suggestion is made.",
"input.diagnostics.password": "Password field — reading is blocked by design.",
"input.diagnostics.caretFallback": "Caret position unavailable; using the end of the document as the typing position.",
"input.diagnostics.composing": "IME composition in progress — suggestions wait a little longer, then still appear.",
"input.suggestion.onScreenLabel": "Overlay status",
"input.suggestion.onScreen": "On screen",
"input.suggestion.offScreen": "Hidden",
"input.suggestion.generating": "Generating…",
"input.kbView.knowledge": "Knowledge base",
"input.kbView.insights": "Input insights",
"input.insights.tabs.overview": "Overview",
"input.insights.tabs.keyboard": "Keyboard",
"input.insights.tabs.mouse": "Mouse",
"input.insights.tabs.apps": "Apps",
"input.insights.tabs.phrases": "Phrases · suggestions",
"input.insights.chars": "Characters typed",
"input.insights.wordChars": "Characters",
"input.insights.backspaces": "Backspaces",
"input.insights.shortcuts": "Shortcuts",
"input.insights.doubleClicks": "Double clicks",
"input.insights.scrollTicks": "Scroll ticks",
"input.insights.activeMinutes": "Active time",
"input.insights.activeDays": "Days recorded",
"input.insights.streak": "Longest streak",
"input.insights.peakDay": "Busiest day",
"input.insights.perDayAverage": "Daily average",
"input.insights.mouseDistanceTotal": "Total mouse travel",
"input.insights.hourlyTitle": "By hour (0-23)",
"input.insights.dailyTitle": "Daily trend",
"input.insights.wordsDailyTitle": "Words per day",
"input.insights.distanceDailyTitle": "Mouse travel per day",
"input.insights.topHoursHint": "Busiest hours: {{hours}}",
"input.insights.mouseNote": "Mouse travel is the sum of per-axis absolute deltas (Manhattan), the same measure ActivityWatch uses.",
"input.insights.appsHint": "Top apps by typing volume. The bar is that app’s share of all keystrokes.",
"input.insights.suggestions": "Suggestions",
"input.insights.suggestionsTotal": "Generated",
"input.insights.suggestionsAccepted": "Accepted",
"input.insights.acceptRate": "Accept rate",
"input.insights.avgLatency": "Average response",
"input.insights.suggestionHistory": "Recent suggestions",
"input.insights.accepted": "accepted",
"input.insights.notAccepted": "not accepted",
"input.insights.noSuggestions": "No suggestions recorded yet.",
"input.insights.samplesNote": "{{count}} learned samples.",
"input.insights.collectedAt": "Last capture {{at}}",
"input.insights.rangeLabel": "Range",
"input.insights.rangeDays": "{{days}} days",
"input.insights.headerSummary": "Last {{days}} days · {{keys}} keystrokes · {{apps}} apps",
"input.insights.disabledHint": "Input collection is off. Turn it on in Settings > Input and statistics will collect here.",
"input.insights.statsMovedHint": "Detailed statistics live in Knowledge base > Input insights.",
"input.chart.max": "max {{value}}",
"input.chart.noData": "No data yet.",
"input.unit.perDay": "/day",
"input.unit.perDayMeters": "m/day",
"input.unit.meters": "m",
"input.unit.ms": "ms",
"input.unit.percent": "%",
"popup.suggestion.warming": "Preparing model…",
"popup.suggestion.hintGenerating": "Generating…",
"popup.suggestion.hintGeneratingMore": "More coming… (up to {{max}})",
"keybinding.action.suggestionPrev": "Previous suggestion",
"keybinding.action.suggestionPrev.desc": "Move to the previous suggestion candidate.",
"input.insights.tabs.graph": "Graph",
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
"input.graph.nodes": "Sentence nodes",
"input.graph.followsEdges": "Follows edges",
"input.graph.sharesEdges": "Term-sharing edges",
"input.graph.topEdges": "Strongest links",
"input.graph.recentNodes": "Recent nodes",
"input.graph.searchLabel": "Search a sentence",
"input.graph.searchPlaceholder": "e.g. meeting schedule",
"input.graph.searchAction": "Search",
"input.graph.neighbors": "Connected sentences",
"input.graph.empty": "The graph is empty. Enable \"Learn the text I type\" in Settings > Input and it fills up.",
"input.graph.kindFollows": "follows",
"input.graph.kindShares": "shares terms",
"popup.suggestion.generating": "Generating… ({{seconds}}s)",
"keybinding.ui.auditClear": "No shortcut conflicts or invalid settings.",
"keybinding.ui.auditIssues": "{{count}} shortcut issues",
"keybinding.ui.auditInvalid": "{{action}}: {{reason}}",
"keybinding.ui.auditConflict": "{{action}} conflicts with {{conflicts}}",
"keybinding.ui.auditUnknown": "Unknown issue",
"input.flow.title": "Likely flow hours",
"input.flow.empty": "Not enough hourly typing data yet.",
"input.flow.hour": "{{hour}}:00",
"input.flow.window": "Score {{score}} · {{minutes}} active min/day · {{friction}}% edits",
"input.friction.title": "Editing friction",
"input.friction.value": "{{count}} per 100 characters",
"input.friction.band.steady": "Steady",
"input.friction.band.watch": "Watch",
"input.friction.band.high": "High",
"input.appQuality.title": "Suggestion quality by app",
"input.appQuality.empty": "No per-app suggestion history yet.",
"input.appQuality.row": "{{accepted}}/{{total}} accepted · {{rate}}% · {{latency}}ms",
"input.phrases.metadata": "{{source}} · {{count}}× · {{app}}",
"input.phrases.appUnknown": "Shared",
"input.privacy.title": "Local data receipt",
"input.privacy.localOnly": "This data stays on this device.",
"input.privacy.rawKeys": "Raw individual key events and key codes are not retained. Learned text samples are listed separately below.",
"input.privacy.activityRetention": "Activity retention",
"input.privacy.suggestionRetention": "Suggestion retention",
"input.privacy.learnedRetention": "Learned text retention",
"input.privacy.activityBuckets": "Activity buckets",
"input.privacy.typingSamples": "Typing samples",
"input.privacy.personalPhrases": "Personal phrases",
"input.privacy.suggestions": "Suggestion records",
"input.privacy.days": "{{days}} days",
"input.privacy.untilDeleted": "Until deleted",
"input.exclusion.recommendation": "{{app}} had {{samples}} repeated unreadable inputs ({{reason}}).",
"input.exclusion.reason.repeated-unreadable": "repeatedly unreadable",
"input.exclusion.reason.repeated-empty": "repeatedly empty",
"input.exclusion.addButton": "Add {{app}} to exclusions",
"input.feedback.recommendationSaved": "Added {{app}} to exclusions.",
"popup.suggestion.sourceModel": "Local model",
"popup.suggestion.sourceMemory": "Local memory",
"popup.suggestion.continuations": "continuations",
"popup.suggestion.related": "related",
"popup.suggestion.phrases": "phrases",
"popup.suggestion.appPhrases": "app phrases",
"input.privacy.typingSamplesRetention": "Typed text sample retention",
"input.privacy.unavailable": "The local data receipt is unavailable right now. Counts and retention are not shown.",
"input.feedback.clearFailed": "Collected data could not be deleted.",
"input.feedback.excludedFailed": "Exclusions could not be saved.",
"input.feedback.recommendationFailed": "Could not add {{app}} to exclusions.",
"popup.caption.waiting": "Listening… the first caption can take a few seconds",
"popup.caption.dragHint": "Drag to move · double-click to reset",
"settings.captionRefine": "Polish captions with context",
"settings.captionRefine.desc": "The local AI fixes spacing, punctuation and misheard words in finished captions using the surrounding lines.",
"settings.captionModel": "Live caption model",
"settings.captionModel.same": "Same as dictation",
"settings.captionModel.desc": "Recognises live captions with a separate model, loaded alongside the dictation model."
}