import type { TranslationMap } from '../types';

// English chunk 2/5. Source of truth for translators.
const en2: TranslationMap = {
  'settings.ai.configStatus': 'Configuration Status',
  'settings.ai.fallbackMode': 'Fallback Mode',
  'settings.ai.loadedFromRuntime': 'Loaded from Runtime',
  'settings.ai.loadingDuration': 'Loading Duration',
  'settings.ai.localRuntime': 'Local Model Runtime',
  'settings.ai.openManager': 'Open Manager',
  'settings.ai.retryDownload': 'Retry Download',
  'settings.ai.state': 'State',
  'settings.ai.targetModel': 'Target Model',
  'settings.ai.download': 'Download',
  'settings.ai.localModelUnavailable': 'Local model status unavailable.',
  'settings.ai.soulConfig': 'SOUL Persona Configuration',
  'settings.ai.refreshing': 'Refreshing...',
  'settings.ai.refreshSoul': 'Refresh SOUL',
  'settings.ai.loadingSoul': 'Loading SOUL configuration...',
  'settings.ai.identity': 'Identity',
  'settings.ai.personality': 'Personality',
  'settings.ai.safetyRules': 'Safety Rules',
  'settings.ai.source': 'Source',
  'settings.ai.loaded': 'Loaded',
  'settings.ai.toolsConfig': 'TOOLS Configuration',
  'settings.ai.refreshTools': 'Refresh TOOLS',
  'settings.ai.toolsAvailable': 'Tools Available',
  'settings.ai.tools': 'tools',
  'settings.ai.activeSkills': 'Active Skills',
  'settings.ai.skills': 'skills',
  'settings.ai.skillsOverview': 'Skills Overview',
  'settings.ai.refreshingAll': 'Refreshing All...',
  'settings.ai.refreshAll': 'Refresh All AI Configuration',
  'settings.notifications.suppressAll': 'Suppress all notifications',
  'settings.notifications.suppressAllDesc':
    'Block all OS notification toasts from embedded apps regardless of focus state.',
  'settings.notifications.toggleDnd': 'Toggle Do Not Disturb',
  'settings.notifications.categories': 'Categories',
  'settings.notifications.categoryFooter':
    'Disabling a category stops new notifications of that type from appearing in the notification center. Existing notifications remain until cleared.',
  'settings.billing.movedToWeb': 'Billing moved to the web',
  'settings.billing.openDashboard': 'Open billing dashboard',
  'settings.billing.movedToWebDesc':
    'Subscription changes, payment methods, credits, and invoices are now managed at TinyHumans on the web.',
  'settings.billing.backToSettings': 'Back to settings',
  'settings.billing.openingBrowser': 'Opening your browser...',
  'settings.billing.browserNotOpen': 'If your browser did not open, use the button above.',
  'settings.billing.browserOpenFailed':
    'The browser could not be opened automatically. Use the button above.',
  'settings.tools.chooseCapabilities':
    'Choose which capabilities OpenHuman can use on your behalf.',
  'settings.tools.saveChanges': 'Save Changes',
  'settings.tools.preferencesSaved': 'Preferences saved',
  'settings.tools.saveFailed': 'Failed to save preferences. Try again.',
  'settings.screenAwareness.mode': 'Mode',
  'settings.screenAwareness.allExceptBlacklist': 'All Except Blacklist',
  'settings.screenAwareness.whitelistOnly': 'Whitelist Only',
  'settings.screenAwareness.screenMonitoring': 'Screen Monitoring',
  'settings.screenAwareness.saveSettings': 'Save Settings',
  'settings.screenAwareness.session': 'Session',
  'settings.screenAwareness.status': 'Status',
  'settings.screenAwareness.active': 'Active',
  'settings.screenAwareness.stopped': 'Stopped',
  'settings.screenAwareness.remaining': 'Remaining',
  'settings.screenAwareness.startSession': 'Start Session',
  'settings.screenAwareness.stopSession': 'Stop Session',
  'settings.screenAwareness.analyzeNow': 'Analyze Now',
  'settings.screenAwareness.macosOnly':
    'Screen Awareness desktop capture and permission controls are currently supported on macOS only.',
  'connections.comingSoon': 'Coming soon',
  'connections.setUp': 'Set up',
  'connections.configured': 'Configured',
  'connections.unavailable': 'Unavailable',
  'connections.checking': 'Checking…',
  'connections.walletConfigured':
    'Local EVM, BTC, Solana, and Tron identities are configured from your recovery phrase.',
  'connections.walletReady':
    'Set up local EVM, BTC, Solana, and Tron identities from one recovery phrase.',
  'connections.walletError':
    'Could not check wallet status. Tap to retry from the Recovery Phrase panel.',
  'connections.walletChecking': 'Checking wallet status...',
  'connections.walletIdentities': 'Wallet identities',
  'connections.walletDerived':
    'Derived locally from your recovery phrase and stored as safe metadata only.',
  'connections.privacySecurity': 'Privacy & Security',
  'connections.privacySecurityDesc':
    'All data and credentials are stored locally with zero-data retention policy. Your information is encrypted and never shared with third parties.',
  'channels.status.connecting': 'Connecting',
  'channels.status.notConfigured': 'Not configured',
  'channels.noActiveRoute': 'No active route',
  'channels.activeRoute': 'Active route',
  'channels.loadingDefinitions': 'Loading channel definitions...',
  'channels.channelConnections': 'Channel Connections',
  'channels.configureAuthModes': 'Configure auth modes for each messaging channel.',
  'channels.configNotAvailable': 'Configuration for',
  'channels.channel': 'channel',
  'devOptions.coreModeNotSet': 'Core mode: not set',
  'devOptions.coreModeNotSetDesc':
    "The boot-check picker hasn't been confirmed yet. Use Switch mode on the picker to choose Local or Cloud.",
  'devOptions.local': 'Local',
  'devOptions.embeddedCoreSidecar': 'Embedded core sidecar',
  'devOptions.sidecarSpawned': 'Spawned in-process by the Tauri shell on app launch.',
  'devOptions.cloud': 'Cloud',
  'devOptions.remoteCoreRpc': 'Remote core RPC',
  'devOptions.token': 'Token',
  'devOptions.tokenNotSet': 'not set — RPC will 401',
  'devOptions.triggerSentryTest': 'Trigger Sentry Test (staging)',
  'devOptions.triggerSentryTestDesc':
    'Fires a tagged error to verify the Sentry pipeline. Issue #1072 — remove after verification.',
  'devOptions.sendTestEvent': 'Send test event',
  'devOptions.sending': 'Sending…',
  'devOptions.eventSent': 'Event sent',
  'devOptions.failed': 'Failed',
  'devOptions.appLogs': 'App logs',
  'devOptions.appLogsDesc':
    'Open the folder containing rolling daily log files. Attach the most recent file when reporting an issue.',
  'devOptions.openLogsFolder': 'Open logs folder',
  'mnemonic.phraseSaved': 'Recovery phrase saved',
  'mnemonic.walletReady': 'Multi-chain wallet identities are ready. Returning to settings...',
  'mnemonic.writeDownWords': 'Write down these',
  'mnemonic.wordsInOrder':
    'words in order and store them somewhere safe. This phrase secures your local encryption key and your EVM, BTC, Solana, and Tron wallet identities.',
  'mnemonic.cannotRecover':
    'This phrase can never be recovered if lost and should stay fully local to your device.',
  'mnemonic.copyToClipboard': 'Copy to Clipboard',
  'mnemonic.alreadyHavePhrase': 'I already have a recovery phrase',
  'mnemonic.consentSaved': 'I saved this phrase and consent to using it for local wallet setup',
  'mnemonic.enterPhraseToRestore':
    'Enter your recovery phrase below to restore your local wallet identities, or paste the full phrase into any field (12 words for new backups; 24-word phrases from older versions still work).',
  'mnemonic.words': 'Words',
  'mnemonic.validPhrase': 'Valid recovery phrase',
  'mnemonic.generateNewPhrase': 'Generate a new recovery phrase instead',
  'mnemonic.securingData': 'Securing Your Data...',
  'mnemonic.saveRecoveryPhrase': 'Save Recovery Phrase',
  'mnemonic.userNotLoaded': 'User not loaded. Please sign in again or refresh the page.',
  'mnemonic.invalidPhrase': 'Invalid recovery phrase. Please check your words and try again.',
  'mnemonic.somethingWentWrong': 'Something went wrong. Please try again.',
  'team.failedToCreate': 'Failed to create team',
  'team.invalidInviteCode': 'Invalid or expired invite code',
  'team.failedToSwitch': 'Failed to switch team',
  'team.failedToLeave': 'Failed to leave team',
  'team.role.owner': 'Owner',
  'team.role.admin': 'Admin',
  'team.role.billingManager': 'Billing Manager',
  'team.role.member': 'Member',
  'team.active': 'Active',
  'team.personalTeam': 'Personal team',
  'team.manageTeam': 'Manage Team',
  'team.switching': 'Switching...',
  'team.switch': 'Switch',
  'team.leaving': 'Leaving...',
  'team.leave': 'Leave',
  'team.yourTeams': 'Your Teams',
  'team.createNewTeam': 'Create New Team',
  'team.teamName': 'Team name',
  'team.creating': 'Creating...',
  'team.joinExistingTeam': 'Join Existing Team',
  'team.inviteCode': 'Invite code',
  'team.joining': 'Joining...',
  'team.join': 'Join',
  'team.leaveTeam': 'Leave Team',
  'team.confirmLeave': 'Are you sure you want to leave',
  'team.leaveWarning':
    "You will lose access to the team and all team resources. You'll need a new invite to rejoin.",
  'team.management': 'Team Management',
  'team.notFound': 'Team not found',
  'team.accessDenied': 'Access denied',
  'team.members': 'Members',
  'voice.title': 'Voice Dictation',
  'voice.settings': 'Voice Settings',
  'voice.settingsDesc': 'Hold the hotkey to dictate and insert text into the active field.',
  'voice.hotkey': 'Hotkey',
  'voice.activationMode': 'Activation Mode',
  'voice.tapToToggle': 'Tap to toggle',
  'voice.writingStyle': 'Writing Style',
  'voice.verbatimTranscription': 'Verbatim transcription',
  'voice.naturalCleanup': 'Natural cleanup',
  'voice.autoStart': 'Start voice server automatically with the core',
  'voice.customDictionary': 'Custom Dictionary',
  'voice.customDictionaryDesc':
    'Add names, technical terms, and domain words to improve recognition accuracy.',
  'voice.addWord': 'Add a word...',
  'voice.sttDisabled':
    'Voice dictation is disabled until the local STT model is downloaded and ready.',
  'voice.openLocalAiModel': 'Open Local AI Model',
  'voice.serverRestarted': 'Voice server restarted with the new settings.',
  'voice.settingsSaved': 'Voice settings saved.',
  'voice.serverStarted': 'Voice server started.',
  'voice.serverStopped': 'Voice server stopped.',
  'voice.saveVoiceSettings': 'Save Voice Settings',
  'voice.startVoiceServer': 'Start Voice Server',
  'voice.stopVoiceServer': 'Stop Voice Server',
  'voice.debugTitle': 'Voice Debug',
  'autocomplete.title': 'Autocomplete',
  'autocomplete.settings': 'Settings',
  'autocomplete.acceptWithTab': 'Accept With Tab',
  'autocomplete.stylePreset': 'Style Preset',
  'autocomplete.style.balanced': 'Balanced',
  'autocomplete.style.concise': 'Concise',
  'autocomplete.style.formal': 'Formal',
  'autocomplete.style.casual': 'Casual',
  'autocomplete.style.custom': 'Custom',
  'autocomplete.disabledApps': 'Disabled Apps (one bundle/app token per line)',
  'autocomplete.saveSettings': 'Save Settings',
  'autocomplete.saving': 'Saving…',
  'autocomplete.runtime': 'Runtime',
  'autocomplete.running': 'Running',
  'autocomplete.start': 'Start',
  'autocomplete.stop': 'Stop',
  'autocomplete.settingsSaved': 'Autocomplete settings saved.',
  'autocomplete.started': 'Autocomplete started.',
  'autocomplete.didNotStart': 'Autocomplete did not start. Check if it is enabled.',
  'autocomplete.stopped': 'Autocomplete stopped.',
  'autocomplete.advancedSettings': 'Advanced settings',
  'autocomplete.debugTitle': 'Autocomplete Debug',
  'chat.agentChat': 'Agent Chat',
  'chat.overrides': 'Overrides',
  'chat.model': 'Model',
  'chat.temperature': 'Temperature',
  'chat.conversation': 'Conversation',
  'chat.startAgentConversation': 'Start a conversation with the agent.',
  'chat.you': 'You',
  'chat.agent': 'Agent',
  'chat.askAgent': 'Ask the agent anything...',
  'chat.sendMessage': 'Send Message',
  'composio.triageTitle': 'Integration Triggers',
  'composio.triageDesc':
    'When active, each incoming Composio trigger runs through an AI triage step that classifies the event and may kick off automated actions — one local LLM turn per trigger. Disable globally or per integration if you prefer manual review. If the environment variable',
  'composio.disableAllTriage': 'Disable AI triage for all triggers',
  'composio.triggersStillRecorded': 'Triggers are still recorded to history — no LLM turn is run.',
  'composio.disableSpecificIntegrations': 'Disable AI triage for specific integrations',
  'composio.settingsSaved': 'Settings saved',
  'composio.saveFailed': 'Failed to save. Try again.',
  'cron.title': 'Cron Jobs',
  'cron.scheduledJobs': 'Scheduled Jobs',
  'cron.manageCronJobs': 'Manage cron jobs from the core scheduler.',
  'cron.refreshCronJobs': 'Refresh Cron Jobs',
  'localModel.modelStatus': 'Model Status',
  'localModel.downloadModels': 'Download Models',
  'localModel.usage': 'Usage',
  'localModel.usageDesc':
    'Choose which subsystems run on the local model. Anything off uses the cloud.',
  'localModel.enableRuntime': 'Enable local AI runtime',
  'localModel.enableRuntimeDesc':
    'Master switch. Off by default — Ollama stays idle. When on, the tree summarizer, screen intelligence, and autocomplete always use the local model.',
  'localModel.advancedSettings': 'Advanced settings',
  'localModel.debugTitle': 'Local Model Debug',
  'localModel.ollamaServer.helperText': 'Example: http://192.168.1.5:11434',
  'localModel.ollamaServer.label': 'Ollama Server URL',
  'localModel.ollamaServer.modelCount': 'models',
  'localModel.ollamaServer.placeholder': 'http://localhost:11434',
  'localModel.ollamaServer.reachable': 'Reachable',
  'localModel.ollamaServer.resetButton': 'Reset to default',
  'localModel.ollamaServer.saveButton': 'Save',
  'localModel.ollamaServer.testButton': 'Test Connection',
  'localModel.ollamaServer.unreachable': 'Unreachable',
  'localModel.ollamaServer.validationError': 'Must be a valid http:// or https:// URL',
  'screenAwareness.debugTitle': 'Screen Awareness Debug',
  'memory.debugTitle': 'Memory Debug',
  'webhooks.debugTitle': 'Webhooks Debug',
  'notifications.routingTitle': 'Notification Routing',
  'common.reload': 'Reload',
  'common.skip': 'Skip',
  'common.disable': 'Disable',
  'common.enable': 'Enable',
  'chat.safetyTimeout':
    'No response from the agent after 2 minutes. Try again or check your connection.',
  'chat.filter.all': 'All',
  'chat.filter.work': 'Work',
  'chat.filter.briefing': 'Briefing',
  'chat.filter.notification': 'Notification',
  'chat.filter.workers': 'Workers',
  'chat.selectThread': 'Select a thread',
  'chat.threads': 'Threads',
  'chat.noThreads': 'No threads yet',
  'chat.noLabelThreads': 'No "{label}" threads',
  'chat.noWorkerThreads': 'No worker threads yet',
  'chat.deleteThread': 'Delete thread',
  'chat.deleteThreadConfirm': 'Are you sure you want to delete "{title}"?',
  'chat.untitledThread': 'Untitled thread',
  'chat.hideSidebar': 'Hide sidebar',
  'chat.showSidebar': 'Show sidebar',
  'chat.newThreadShortcut': 'New thread (/new)',
  'chat.new': 'New',
  'chat.failedToLoadMessages': 'Failed to load messages',
  'chat.thinkingIteration': 'Thinking... ({n})',
  'chat.thinkingDots': 'Thinking...',
  'chat.approachingLimit': 'Approaching usage limit',
  'chat.approachingLimitMsg': 'You have used {pct}% of your available quota.',
  'chat.upgrade': 'Upgrade',
  'chat.weeklyLimitHit': "You've used your included cycle budget.",
  'chat.resets': 'Resets',
  'chat.topUpToContinue': 'Top up to continue.',
  'chat.budgetComplete': 'Your included budget is complete. Add credits or upgrade to continue.',
  'chat.topUp': 'Top Up',
  'chat.cycle': 'Cycle',
  'chat.cycleSpent': 'Spent this cycle',
  'chat.cycleRemaining': 'Remaining',
  'chat.left': 'left',
  'chat.setup': 'Set up',
  'chat.switchToText': 'Switch to text',
  'chat.transcribing': 'Transcribing...',
  'chat.stopAndSend': 'Stop and send',
  'chat.startTalking': 'Start talking',
  'chat.playingVoiceReply': 'Playing voice reply',
  'chat.voiceHint': 'Use the mic to speak',
  'chat.micUnavailable': 'Microphone unavailable',
  'chat.turn': 'turn',
  'chat.turns': 'turns',
  'chat.openWorkerThread': 'Open worker thread',
  'memory.searchAria': 'Search memory',
  'memory.searchPlaceholder': 'Search memory entries...',
  'memory.sourceFilter.all': 'All sources',
  'memory.sourceFilter.email': 'Email',
  'memory.sourceFilter.calendar': 'Calendar',
  'memory.sourceFilter.telegram': 'Telegram',
  'memory.sourceFilter.aiInsight': 'AI Insight',
  'memory.sourceFilter.system': 'System',
  'memory.sourceFilter.trading': 'Trading',
  'memory.sourceFilter.security': 'Security',
  'memory.ingestionActivity': 'Ingestion Activity',
  'memory.events': 'events',
  'memory.event': 'event',
  'memory.overTheLast': 'over the last',
  'memory.months': 'months',
  'memory.peak': 'Peak',
  'memory.perDay': '/day',
  'memory.less': 'Less',
  'memory.more': 'More',
  'memory.on': 'on',
  'memory.loading': 'Loading Memory',
  'memory.fetching': 'Fetching your memory entries...',
  'memory.analyzing': 'Analyzing Memory',
  'memory.analyzingHint': 'Processing your memories to extract insights...',
  'memory.noMatches': 'No Matches Found',
  'memory.noMatchesHint': 'Try changing your search terms or filters.',
  'memory.allCaughtUp': 'All Caught Up',
  'memory.allCaughtUpHint': 'No new memory entries to process.',
  'memory.noAnalysis': 'No Analysis Yet',
  'memory.noAnalysisHint': 'Run an analysis to discover patterns in your memories.',
  'memory.emptyHint': 'Start interacting to create your first memories.',
  'mic.unavailable': 'Microphone is not available',
  'mic.permissionDenied': 'Microphone permission denied',
  'mic.failedToStartRecorder': 'Failed to start recorder',
  'mic.transcribing': 'Transcribing...',
  'mic.tapToSend': 'Tap to send',
  'mic.waitingForAgent': 'Waiting for agent...',
  'mic.tapAndSpeak': 'Tap and speak',
  'mic.stopRecording': 'Stop recording and send',
  'mic.startRecording': 'Start recording',
  'token.usageLimitReached': 'Usage limit reached',
  'token.approachingLimit': 'Approaching limit',
  'token.planClickForDetails': 'plan - click for details',
  'token.sessionTokens': 'In: {in} | Out: {out} | Turns: {turns}',
  'token.limit': 'Limit Reached',
  'catalog.noCapabilityBinding': 'No capability binding',
  'catalog.downloadFailed': 'Download failed',
  'catalog.active': 'Active',
  'catalog.installed': 'Installed',
  'catalog.notDownloaded': 'Not downloaded',
  'catalog.inUse': 'In Use',
  'catalog.use': 'Use',
  'catalog.deleteModel': 'Delete model',
  'catalog.download': 'Download',
  'navigator.recent': 'Recent',
  'navigator.today': 'Today',
  'navigator.thisWeek': 'This Week',
  'navigator.sources': 'Sources',
  'navigator.email': 'Email',
  'navigator.slack': 'Slack',
  'navigator.chat': 'Chat',
  'navigator.documents': 'Documents',
  'navigator.people': 'People',
  'navigator.topics': 'Topics',
  'dreams.description':
    'Dreams are AI-generated reflections that synthesize patterns from your memories.',
  'dreams.comingSoon': 'Coming soon',
  'assignment.memoryLlm': 'Memory LLM',
  'assignment.memoryLlmAria': 'Memory LLM selection',
  'assignment.embedder': 'Embedder',
  'assignment.loaded': 'Loaded',
  'assignment.notDownloaded': 'Not downloaded',
  'assignment.usedForExtractSummarise': 'Used for extraction and summarization',
  'insights.knownFacts': 'Known Facts',
  'insights.preferences': 'Preferences',
  'insights.relationships': 'Relationships',
  'insights.skills': 'Skills',
  'insights.opinions': 'Opinions',
  // Developer options menu items (#2225)
  'devOptions.menuAi': 'AI Configuration',
  'devOptions.menuAiDesc': 'Cloud providers, local Ollama models, and per-workload routing',
  'devOptions.menuScreenAware': 'Screen Awareness',
  'devOptions.menuScreenAwareDesc':
    'Screen capture permissions, monitoring policy, and session controls',
  'devOptions.menuMessaging': 'Messaging Channels',
  'devOptions.menuMessagingDesc':
    'Configure Telegram/Discord auth modes and default channel routing',
  'devOptions.menuTools': 'Tools',
  'devOptions.menuToolsDesc': 'Enable or disable capabilities OpenHuman can use on your behalf',
  'devOptions.menuAgentChat': 'Agent Chat',
  'devOptions.menuAgentChatDesc': 'Test agent conversation with model and temperature overrides',
  'devOptions.menuCronJobs': 'Cron Jobs',
  'devOptions.menuCronJobsDesc': 'View and configure scheduled jobs for runtime skills',
  'devOptions.menuLocalModelDebug': 'Local Model Debug',
  'devOptions.menuLocalModelDebugDesc':
    'Ollama config, asset downloads, model tests, and diagnostics',
  'devOptions.menuWebhooksDebug': 'Webhooks',
  'devOptions.menuWebhooksDebugDesc':
    'Inspect runtime webhook registrations and captured request logs',
  'devOptions.menuIntelligence': 'Intelligence',
  'devOptions.menuIntelligenceDesc': 'Memory workspace, subconscious engine, dreams, and settings',
  'devOptions.menuNotificationRouting': 'Notification Routing',
  'devOptions.menuNotificationRoutingDesc':
    'AI importance scoring and orchestrator escalation for integration alerts',
  'devOptions.menuComposeIOTriggers': 'ComposeIO Triggers',
  'devOptions.menuComposeIOTriggersDesc': 'View ComposeIO trigger history and archive',
  'devOptions.menuComposioRouting': 'Composio Routing (Direct Mode)',
  'devOptions.menuComposioRoutingDesc':
    'Bring your own Composio API key and route calls directly to backend.composio.dev',
  'devOptions.menuComposioTriggers': 'Integration Triggers',
  'devOptions.menuComposioTriggersDesc':
    'Configure AI triage settings for Composio integration triggers',
};

export default en2;
