{
  "settingsSections": {
    "overview": "System status",
    "appearance": "Preferences",
    "agent": "Agent",
    "agent-defaults": "Agent settings",
    "agent-chat": "Default configuration",
    "agent-workspace": "Workspace",
    "agent-browser": "Browser",
    "agent-runtime": "Turn limits",
    "agent-context": "Context",
    "agent-memory": "Memory",
    "agent-tools": "Tools",
    "agent-skills": "Default skill allowlist",
    "agent-mcp": "External tools (MCP)",
    "agent-system-prompt": "System prompt",
    "providers": "Providers & keys",
    "credentials": "Models & capabilities",
    "models": "Model catalog",
    "image-models": "Images",
    "channels": "Channels",
    "voice": "Voice",
    "gateway": "Gateway",
    "heartbeat": "Heartbeat",
    "tunnel": "Remote access",
    "remote-access": "Remote access",
    "shares": "File sharing",
    "search": "Web search",
    "dreams": "Background reflection",
    "goals": "Goal mode",
    "agents": "Agents",
    "system": "System permissions",
    "app-management": "App management",
    "cron": "Scheduled tasks",
    "skills": "Skills"
  },
  "settingsPage": {
    "comingSoon": "Settings · {{title}} (coming soon)."
  },
  "modelsHub": {
    "subtitle": "Configure provider keys, the model catalog, capability models, and setup health.",
    "docsLink": "Read the docs",
    "tabsAria": "Models & capabilities sections",
    "saveBar": {
      "title": "Unsaved changes summary",
      "cleanSummary": "All sections saved.",
      "dirtySummary": "{{count}} section(s) have unsaved changes.",
      "savedSummary": "All changes saved.",
      "failuresSummary": "{{count}} section(s) failed to save.",
      "saveAll": "Save all",
      "discardAll": "Discard all"
    },
    "tabs": {
      "services": "Model services",
      "imageModels": "Images",
      "voice": "Voice",
      "search": "Web search"
    },
    "servicesHint": "Manage connected model providers, or add a new one.",
    "imageModelsHint": "Configure image understanding, image generation models, and related provider keys.",
    "voiceHint": "Configure speech-to-text, text-to-speech providers, and trigger behavior.",
    "searchHint": "Configure search providers and guardrails used by the web_search tool.",
    "connectedProviders": {
      "title": "Connected services",
      "titleCount": "Connected services ({{count}})",
      "empty": "No model services connected yet",
      "emptyHint": "Connect a provider and enter your API key to get started.",
      "addProvider": "Add provider",
      "manage": "Manage",
      "models": "Models",
      "modelsCount": "{{count}} models",
      "custom": "Custom",
      "loading": "Loading…",
      "noModels": "No models"
    },
    "addProviderDialog": {
      "title": "Add a provider",
      "searchPlaceholder": "Search providers…",
      "builtinSection": "Built-in providers",
      "customSection": "Custom services",
      "customDescription": "Connect an OpenAI-compatible private deployment or third-party model service",
      "addCustom": "Add custom model service",
      "configured": "Configured",
      "notConfigured": "Not configured",
      "apiKeyLabel": "API Key",
      "apiKeyPlaceholder": "Enter API key…",
      "baseUrlLabel": "Base URL",
      "baseUrlPlaceholder": "https://api.example.com/v1",
      "providerIdLabel": "Provider ID",
      "providerIdPlaceholder": "e.g. my-provider",
      "save": "Save",
      "saving": "Saving…",
      "saved": "Saved",
      "cancel": "Cancel",
      "close": "Close",
      "back": "Back",
      "getApiKey": "Get API key",
      "getApiKeyIntl": "Get API key (intl)",
      "getApiKeyCn": "Get API key (CN)",
      "saveError": "Save failed. Please try again.",
      "addModel": "Add model",
      "modelIdLabel": "Model ID",
      "modelIdPlaceholder": "e.g. gpt-4o",
      "noResults": "No matching providers",
      "step1Title": "Choose a provider",
      "step2BuiltinTitle": "Configure provider",
      "step2CustomTitle": "Add custom model service",
      "presetLabel": "Preset",
      "presetCustom": "Custom",
      "presetOllama": "Ollama",
      "presetLmStudio": "LM Studio",
      "presetOpenRouter": "OpenRouter",
      "presetZhipuCn": "Zhipu GLM (China · Coding API)",
      "presetZaiGeneral": "Zhipu GLM (International · general API)",
      "apiTypeLabel": "API type",
      "providerIdRequired": "Provider ID is required.",
      "baseUrlRequired": "Base URL is required.",
      "categories": {
        "common": "Popular",
        "specialty": "Specialty",
        "enterprise": "Enterprise",
        "oauth": "OAuth",
        "extension": "Extension"
      }
    },
    "manageProviderDialog": {
      "apiKeyLabel": "API Key",
      "apiKeyPlaceholder": "Enter new API key…",
      "apiUrlLabel": "API URL",
      "apiUrlExtensionHint": "Requests are routed through the extension plugin (no fixed public API URL).",
      "baseUrlLabel": "Base URL",
      "modelsLabel": "Available models",
      "noModels": "No models for this provider",
      "modelsCount": "{{count}} models",
      "save": "Save",
      "saving": "Saving…",
      "saved": "Saved",
      "cancel": "Cancel",
      "close": "Close",
      "remove": "Remove",
      "removeConfirmTitle": "Remove provider",
      "removeConfirmDescription": "Remove the configuration for {{provider}}? You'll need to re-enter the key to use it again.",
      "removeConfirmAction": "Remove",
      "saveError": "Save failed. Please try again.",
      "getApiKey": "Get API key",
      "getApiKeyIntl": "Get API key (intl)",
      "getApiKeyCn": "Get API key (CN)",
      "showKey": "Show key",
      "hideKey": "Hide key",
      "copy": "Copy",
      "copied": "Copied",
      "maskedHelp": "Saved keys are hidden. Use the eye to load the key from the gateway store or models.json (not from environment variables).",
      "notInConfigFile": "No key stored in the gateway or models.json — this provider may be using an environment variable or OAuth.",
      "extensionKeyHint": "This extension provider manages its own credentials. No gateway API key is required — configure optional keys in extension settings or environment variables if needed.",
      "openExtensionSettings": "Open extension settings",
      "extensionSettingsLinkTitle": "Configure optional credentials in the extension settings page",
      "loadFailed": "Could not load the API key.",
      "custom": "Custom"
    }
  },
  "setupStatus": {
    "title": "System status",
    "subtitle": "See what's configured and finish setup to start chatting.",
    "refresh": "Refresh",
    "loading": "Loading status…",
    "loadError": "Could not load system status. Check your gateway connection and try again.",
    "summaryTitle": "At a glance",
    "summarySubtitle": "Core services needed for chat.",
    "summaryGateway": "Gateway",
    "summaryProviders": "Providers",
    "summaryModel": "Default model",
    "statusOnline": "Online",
    "statusOffline": "Offline",
    "requiredCompleteMessage": "Required setup is complete — you're ready to chat.",
    "requiredIncompleteMessage": "Complete the required steps below to start chatting.",
    "checklistTitle": "Setup checklist",
    "checklistSubtitle": "Tap a step to open its settings. Optional steps enhance channels and skills.",
    "optionalBadge": "Optional",
    "labels": {
      "gatewayOnline": "Connected to gateway",
      "gatewayOffline": "Not connected — check token and gateway",
      "providersConfigured": "{{count}} provider(s) configured",
      "providersMetaReady": "{{configured}} / {{total}} providers ready",
      "providersMissing": "No provider configured",
      "modelConfigured": "{{model}}",
      "modelMissing": "No default model selected",
      "channelConfigured": "At least one channel connected",
      "channelMissing": "No channel configured yet",
      "skillsConfigured": "{{count}} skill(s) available",
      "skillsMissing": "No skills installed yet",
      "presetsConfigured": "{{count}} agent(s) configured",
      "presetsMissing": "Only the default agent — add preset personas"
    },
    "items": {
      "gateway": {
        "title": "Connect gateway",
        "description": "Verify the Web console can reach your xopc gateway."
      },
      "provider": {
        "title": "Configure LLM provider",
        "description": "Add at least one AI provider API key or OAuth token."
      },
      "defaultModel": {
        "title": "Choose default model",
        "description": "Set the model used for new conversations."
      },
      "channel": {
        "title": "Connect a channel",
        "description": "Link Telegram, Weixin, or Feishu to chat from messaging apps."
      },
      "skill": {
        "title": "Install a skill",
        "description": "Browse the marketplace or catalog to extend agent capabilities."
      },
      "presets": {
        "title": "Add preset agents",
        "description": "Create specialized agents (Coder, Writer, etc.) for different tasks."
      }
    },
    "scenarios": {
      "title": "Quick setup scenarios",
      "subtitle": "Pick a path that matches how you plan to use xopc — each step opens the right settings.",
      "dismiss": "Hide",
      "steps": {
        "stepProviders": "Configure LLM provider keys",
        "stepDefaultModel": "Choose default chat model",
        "stepChannel": "Connect a messaging channel",
        "stepPresets": "Add specialized agents",
        "stepCron": "Set up scheduled tasks",
        "stepSkills": "Install skills from the catalog"
      },
      "presets": {
        "lightChat": {
          "title": "Light chat",
          "description": "Talk to your assistant in the web console with one provider and a default model."
        },
        "multiChannel": {
          "title": "Multi-channel assistant",
          "description": "Reply from Telegram or other channels with dedicated agents for different contexts."
        },
        "automation": {
          "title": "Automation workflow",
          "description": "Combine skills and cron jobs for recurring background work."
        }
      }
    }
  },
  "credentialsHub": {
    "title": "Credentials hub",
    "subtitle": "One place to see API keys and OAuth status across chat, search, images, and voice.",
    "refresh": "Refresh",
    "loading": "Loading credentials…",
    "loadError": "Could not load credential status. Check your gateway connection and try again.",
    "domainsTitle": "Credential domains",
    "domainsSubtitle": "Manage keys on each detail page — values stay in your gateway config.",
    "footerHint": "LLM keys live under Providers. Image, voice, and web-search keys may also appear in environment variables — the gateway shows only what is stored in config.",
    "status": {
      "ready": "Ready",
      "partial": "Partial",
      "missing": "Missing",
      "notNeeded": "Optional"
    },
    "labels": {
      "llmMetaReady": "{{configured}} / {{total}} LLM providers ready",
      "llmConfigured": "{{count}} LLM provider(s) configured",
      "llmMissing": "No LLM provider configured",
      "webSearchDisabled": "Web search disabled",
      "webSearchReady": "{{configured}} / {{total}} search provider keys set",
      "webSearchNoProviders": "No search providers configured",
      "imageReady": "{{configured}} / {{total}} image providers configured",
      "imageNoProviders": "No image providers registered",
      "voiceDisabled": "Speech input/output disabled",
      "voiceReadyNoKeys": "Speech enabled — no API keys required",
      "voiceKeysReady": "{{configured}} / {{total}} speech API keys set",
      "voiceMissing": "Speech not configured"
    },
    "domains": {
      "llm": {
        "title": "LLM providers",
        "description": "API keys and OAuth for chat models."
      },
      "webSearch": {
        "title": "Web search",
        "description": "Brave, Tavily, and other search API keys."
      },
      "image": {
        "title": "Image generation",
        "description": "Keys for vision and image-generation providers."
      },
      "voice": {
        "title": "Voice (STT / TTS)",
        "description": "Speech recognition and text-to-speech credentials."
      }
    }
  },
  "dreamingSettings": {
    "title": "Dreams",
    "subtitle": "Inspect and maintain the background memory promotion sweep.",
    "tabsAriaLabel": "Dreams settings categories",
    "tabConfig": "Configuration",
    "tabRuntime": "Runtime",
    "tabInsights": "Preview & logs",
    "tabMaintenance": "Maintenance",
    "configTabHint": "Tune the dreaming switch, global schedule, and Light / Deep / REM phase parameters.",
    "runtimeTabHint": "Review effective schedules, promotion lock, short-term recall store, and latest run output.",
    "insightsTabHint": "Preview promotion candidates and inspect phase audit logs.",
    "maintenanceTabHint": "Reset the short-term store or clear a stuck promotion lock; MEMORY.md is not edited.",
    "refresh": "Refresh",
    "runNow": "Run now",
    "runPhaseLabel": "Phase",
    "runNowHint": "Trigger the managed cron job immediately.",
    "runQueued": "Run queued.",
    "actionOk": "Done.",
    "configSaved": "Configuration saved.",
    "configTitle": "Configuration",
    "configHint": "Edits agents.defaults.memory.dreaming and writes back to the gateway config file.",
    "configLoading": "Loading configuration…",
    "saveConfig": "Save",
    "resetConfig": "Reset",
    "configEnabled": "Enable dreaming",
    "configFrequency": "Global fallback schedule",
    "configTimezone": "Timezone (IANA)",
    "configPhaseLight": "Light Sleep",
    "configPhaseLightHint": "Lightweight deduplication sweep (every 6h by default).",
    "configPhaseDeep": "Deep Sleep",
    "configPhaseDeepHint": "Full promotion sweep with scoring and time decay (daily at 3 AM).",
    "configPhaseRem": "REM Sleep",
    "configPhaseRemHint": "Cross-entry pattern clustering and dream diary (weekly on Sunday 5 AM).",
    "configPhaseEnabled": "Enabled",
    "configPhaseCron": "Cron schedule",
    "configLightLookbackDays": "Lookback (days)",
    "configLightLimit": "Limit",
    "configLightDedupe": "Dedupe similarity",
    "configDeepMinScore": "Min score",
    "configDeepMinRecallCount": "Min recall count",
    "configDeepLimit": "Limit",
    "configDeepHalfLife": "Recency half-life (days)",
    "configDeepMaxAge": "Max age (days)",
    "configRemLookbackDays": "Lookback (days)",
    "configRemLimit": "Limit",
    "configRemMinStrength": "Min pattern strength",
    "previewTitle": "Preview (dry-run)",
    "previewHint": "Shows the top candidates after rehydration, contamination filtering, and marker/hash dedupe checks. No files are written.",
    "previewLoad": "Load preview",
    "previewNotLoaded": "Preview not loaded yet.",
    "previewEmpty": "No eligible candidates found.",
    "previewEligible": "eligible",
    "runtimeTitle": "Runtime",
    "runtimeHint": "Read-only: effective settings from the gateway, the recall store, and the latest sweep output.",
    "subsectionSchedule": "Schedule & lock",
    "subsectionStore": "Short-term store",
    "subsectionPhases": "Phases (live)",
    "subsectionDeep": "Deep gate (live)",
    "subsectionLastRun": "Last sweep (deep)",
    "subsectionLightLastRun": "Last sweep (light)",
    "subsectionRemLastRun": "Last sweep (REM)",
    "lastRunBlockHint": "Data file: memory/.dreams/last-run.json",
    "phaseLastRunEmpty": "No runs recorded yet.",
    "phaseLastRunOk": "OK",
    "phaseLastRunFailed": "Failed",
    "lockValueLocked": "Locked",
    "lockValueUnlocked": "Unlocked",
    "statusTitle": "Status",
    "statusHint": "This reads the store under your configured workspace (memory/.dreams).",
    "enabled": "Enabled",
    "on": "On",
    "off": "Off",
    "schedule": "Schedule",
    "timezone": "Timezone",
    "lock": "Promotion lock",
    "storeEntries": "Store entries",
    "storePromoted": "Promoted entries",
    "storeUpdatedAt": "Store updated",
    "storeLastPromotedAt": "Last promoted",
    "deepGate": "Deep gate:",
    "deepGateValue": "minScore={{minScore}}, minRecallCount={{minRecallCount}}, limit={{limit}}",
    "lastRunTitle": "Last run",
    "lastRunHint": "memory/.dreams/last-run.json: timing, deep gate config snapshot, ranked/applied counts, and skip reasons. Raw JSON is below for debugging.",
    "lastRunEmpty": "No runs recorded yet.",
    "lastRunDuration": "Duration",
    "lastRunStatus": "Result",
    "lastRunSuccess": "OK",
    "lastRunFailure": "Failed",
    "lastRunReason": "Reason",
    "lastRunError": "Error",
    "lastRunRanked": "Ranked candidates",
    "lastRunApplied": "Applied to MEMORY.md",
    "lastRunSkipped": "Skipped (counts)",
    "lastRunSkipKey": "Key already in MEMORY",
    "lastRunSkipRehydrate": "Rehydrate failed",
    "lastRunSkipContaminated": "Contaminated",
    "lastRunSkipHash": "Hash duplicate",
    "lastRunParseError": "Could not parse last-run file",
    "lastRunRaw": "Raw JSON",
    "eventsTitle": "Event log",
    "eventsHint": "Audit trail of dreaming phase runs (memory/.dreams/events.jsonl).",
    "eventsLoad": "Load events",
    "eventsNotLoaded": "Event log not loaded yet.",
    "eventsEmpty": "No events recorded yet.",
    "maintenanceTitle": "Maintenance",
    "maintenanceHint": "These actions only affect the store/lock files. They do not edit MEMORY.md.",
    "resetStore": "Reset store",
    "clearLock": "Clear lock",
    "confirmResetStore": "Reset the dreaming store? This clears short-term recall signals.",
    "confirmClearLock": "Clear the promotion lock file? Only do this if a sweep got stuck."
  },
  "systemSettings": {
    "title": "System permissions",
    "behaviorGroup": "App behavior",
    "desktopOnlyTitle": "Desktop app only",
    "desktopOnlyBody": "System integration is available in the xopc Electron app. In the browser, use your OS settings instead.",
    "toggles": {
      "openAtLogin": "Open at login",
      "openAtLoginDesc": "Start xopc when you sign in to this user account.",
      "keepAwake": "Keep system awake",
      "keepAwakeDesc": "While enabled, the app requests that the system stay awake (agent work may not be interrupted by idle sleep).",
      "notifyDesktop": "Desktop notifications",
      "notifyDesktopDesc": "Show native notifications when the app is in the background (updates, toasts, and agent errors).",
      "notifySound": "Sound notifications",
      "notifySoundDesc": "Play a short sound with each desktop notification."
    },
    "permissionsTitle": "System permissions",
    "permissionsHint": "Status is best-effort. After changing system settings, refresh or revisit this page.",
    "permissionsHintDarwin": "macOS privacy (TCC) and media status are best-effort. Use Refresh after you change System Settings.",
    "permissionsHintDevDarwin": "Development builds (electron:dev) appear as Electron in System Settings, not xopc. Test permissions with a packaged .app for accurate naming.",
    "permissionsHintWin": "On Windows, microphone and (where reported) screen access follow system-wide toggles. Each link opens a relevant page in the Settings app.",
    "permissionsHintLinux": "Linux does not report these states here. We try to open your desktop’s Settings; otherwise a documentation page opens. Grant access in your distro, Flatpak, or portal as needed.",
    "status": {
      "granted": "Allowed",
      "denied": "Not allowed",
      "unknown": "Unknown"
    },
    "openSettings": "Open settings",
    "refresh": "Refresh status",
    "refreshing": "Refreshing…",
    "refreshDone": "Permission status updated.",
    "openSettingsDone": "Opened system settings.",
    "openSettingsFailed": "Could not open system settings. Find the matching page manually.",
    "requestAccess": "Request access",
    "permFeedback": {
      "granted": "Microphone access is granted.",
      "alreadyGranted": "Microphone was already granted.",
      "openedSettings": "Opened Microphone in System Settings — enable xopc, then tap Refresh status.",
      "denied": "Microphone access is denied. Enable xopc in System Settings.",
      "rendererDenied": "The app could not access the microphone. Check OS privacy settings.",
      "prompted": "If a system prompt appears, allow microphone access."
    },
    "screenFeedback": {
      "granted": "Screen recording access is granted.",
      "alreadyGranted": "Screen recording was already granted.",
      "openedSettings": "Opened Screen Recording in System Settings — enable xopc, then tap Refresh status.",
      "denied": "Screen recording is denied. Enable xopc in System Settings.",
      "prompted": "If a system prompt appears, allow screen recording for xopc."
    },
    "accessibilityFeedback": {
      "granted": "Accessibility access is granted.",
      "alreadyGranted": "Accessibility was already granted.",
      "openedSettings": "Opened Accessibility in System Settings — enable xopc, then tap Refresh status.",
      "denied": "Accessibility is not granted. Enable xopc in System Settings."
    },
    "notificationsFeedback": {
      "granted": "Notification permission is granted.",
      "alreadyGranted": "Notifications were already allowed.",
      "openedSettings": "Opened Notifications in System Settings — enable xopc, then tap Refresh status.",
      "denied": "Notification permission was denied. Enable xopc in System Settings.",
      "prompted": "If a system prompt appears, allow notifications for xopc.",
      "default": "Notification permission was not granted. Try again or enable it in System Settings.",
      "unsupported": "System notifications are not supported in this environment."
    },
    "desktopNotify": {
      "testTitle": "Desktop notifications enabled",
      "testBody": "You will see alerts here when xopc is in the background.",
      "testShown": "Test notification sent. Allow notifications in System Settings if you did not see it.",
      "denied": "Notification permission was denied. Enable notifications for xopc, then try again.",
      "agentErrorTitle": "Agent run failed",
      "agentErrorBody": "Open xopc to see details."
    },
    "perm": {
      "fullDisk": {
        "title": "Files & storage",
        "desc": "Read and write workspace and user data when the OS or sandbox allows (wording and paths vary by system)."
      },
      "screen": {
        "title": "Screen Recording",
        "desc": "Capture the screen for vision features outside the in-app browser."
      },
      "microphone": {
        "title": "Microphone",
        "desc": "Record voice in chat and voice features."
      },
      "accessibility": {
        "title": "Accessibility",
        "desc": "Use global shortcuts and accessibility-related integrations."
      },
      "automation": {
        "title": "Automation & app integration",
        "desc": "Control or integrate with other apps and services (e.g. Apple Events on macOS, default apps on Windows, or desktop portals on Linux)."
      },
      "notifications": {
        "title": "Notifications",
        "desc": "Allow the app in your OS notification settings so alerts can appear."
      },
      "location": {
        "title": "Location",
        "desc": "Location-based tasks when the product uses location."
      }
    },
    "permUnknown": {
      "fullDisk": {
        "darwin": "macOS does not report this until access is attempted. Grant Full Disk Access if workspace reads fail.",
        "win32": "Windows does not report this here. Open Storage settings if file access fails.",
        "linux": "Grant file access in your distro, Flatpak, or desktop portal if reads fail."
      },
      "screen": {
        "darwin": "Grant Screen Recording for xopc if screen capture tools fail.",
        "win32": "Enable screen capture for desktop apps in Settings if capture fails.",
        "linux": "Use your desktop portal or compositor settings if screen capture fails."
      },
      "microphone": {
        "darwin": "Use Request access or open Microphone settings if voice input fails.",
        "win32": "Use Request access or open Microphone privacy settings if voice input fails.",
        "linux": "Grant microphone access in your desktop or Flatpak settings if voice input fails."
      },
      "accessibility": {
        "darwin": "Required for global shortcuts. Use Request access, then enable xopc under Accessibility.",
        "win32": "Open Accessibility settings if global shortcuts or integrations fail.",
        "linux": "Grant accessibility permissions in your desktop environment if shortcuts fail."
      },
      "automation": {
        "darwin": "Grant Automation (Apple Events) if controlling other apps fails.",
        "win32": "Configure default apps and automation in Windows Settings if integrations fail.",
        "linux": "Use desktop portal or session settings for app integration if automation fails."
      },
      "notifications": {
        "darwin": "Use Request access, then allow notifications for xopc in System Settings.",
        "win32": "Use Request access, then allow notifications for xopc in Settings.",
        "linux": "Allow notifications in your desktop environment or Flatpak permissions."
      },
      "location": {
        "darwin": "Grant Location Services for xopc if location features fail.",
        "win32": "Enable location for desktop apps in Settings if location features fail.",
        "linux": "Grant location in your desktop portal if location features fail."
      }
    },
    "appManagement": {
      "title": "App management",
      "loading": "Loading…",
      "devOnlyTitle": "Development build",
      "devOnlyBody": "Clear data and uninstall are only available in the packaged desktop app. Paths below are for reference.",
      "appPath": "Install location",
      "dataPath": "Local data",
      "dataSize": "Data size",
      "dataSizeUnknown": "—",
      "copyPath": "Copy",
      "copied": "Copied",
      "copyFailed": "Could not copy to the clipboard. Select the path and copy manually.",
      "cliDataWarning": "Separate CLI data was found at ~/.xopc. Clearing local data here does not remove it.",
      "openCliData": "Open CLI data folder",
      "pendingUpdateBlocked": "Finish or cancel the pending update before clearing data or uninstalling.",
      "clearData": "Clear local data",
      "clearDataDesc": "Remove config, sessions, workspace, and caches. The app will restart with default settings.",
      "clearDataConfirmTitle": "Clear local data?",
      "clearDataConfirmDesc": "This permanently deletes API keys, sessions, transcripts, and workspace files stored by the desktop app. This cannot be undone.",
      "clearDataConfirmCheckbox": "I understand this cannot be undone",
      "clearDataConfirmPhrase": "confirm delete",
      "clearDataConfirmLabel": "Type \"confirm delete\" to continue",
      "clearDataConfirmHint": "The clear button stays disabled until the phrase matches exactly.",
      "uninstall": "Uninstall app",
      "uninstallDescDarwin": "Opens Finder with xopc selected, then quits the app. Drag xopc.app to the Trash to finish uninstalling.",
      "uninstallDescWin": "Opens the Windows uninstall wizard and quits xopc.",
      "uninstallDescLinuxAppImage": "Opens the folder containing the AppImage, then quits xopc. Delete the AppImage file to uninstall.",
      "uninstallDescLinuxDeb": "Quits xopc and opens the install folder. Remove the package with: sudo dpkg -r {{package}} (or use your distro software center).",
      "uninstallDescLinuxUnknown": "Opens the install location, then quits xopc. Remove the app binary or package using your distro tools.",
      "uninstallConfirmTitle": "Uninstall xopc?",
      "removeUserDataCheckbox": "Also clear local data before uninstalling",
      "confirmClear": "Clear data",
      "confirmUninstall": "Uninstall",
      "cancel": "Cancel",
      "errors": {
        "pendingUpdate": "A downloaded update is waiting to install. Restart to update or wait before uninstalling.",
        "uninstallerNotFound": "Could not find the uninstaller. Remove xopc from Settings → Apps → Installed apps.",
        "notPackaged": "This action is not available in development mode. Use the packaged desktop app.",
        "generic": "Operation failed. Try again or use your system settings to uninstall."
      }
    }
  },
  "settingsNavGroups": {
    "general": "General",
    "system": "System settings",
    "credentials": "Credentials & models",
    "agent": "Agent settings",
    "connection": "Connection",
    "automation": "Automation",
    "diagnostics": "Diagnostics",
    "extensions": "Extensions"
  },
  "cronSettingsPage": {
    "title": "Scheduled tasks",
    "subtitle": "Global scheduler limits and defaults for all cron jobs.",
    "tasksLink": "Manage tasks and run history →"
  },
  "goalsSettingsPage": {
    "title": "Goal judge",
    "subtitle": "Default settings for persistent /goal tasks and checklist judging."
  },
  "imageModelsSettings": {
    "title": "Images",
    "subtitle": "Vision (understanding) and image-generation defaults, runtime options, and registered image providers.",
    "refresh": "Refresh",
    "crossLinkHint": "Primary chat model and sampling are on the Chat tab; text model fallbacks are on the Models tab (same group). This page and Agent defaults together edit vision (understanding) and image-generation fields in agents.defaults.",
    "timeoutLabel": "Timeout (ms)",
    "timeoutHint": "Hard cap for one generation attempt; leave empty for the gateway default (120000 ms).",
    "autoFallbackLabel": "Auto-fallback to any configured provider",
    "autoFallbackHint": "After the primary chain fails, sweep every other configured provider before giving up.",
    "save": "Save",
    "discard": "Discard",
    "saving": "Saving…",
    "saved": "Saved.",
    "fallbackChainsTitle": "Fallback chains",
    "runtimeTuningTitle": "Runtime tuning",
    "providersTitle": "Registered providers",
    "providersEmpty": "No image-generation providers registered.",
    "configured": "Configured",
    "missingKey": "Missing API key",
    "unsavedChanges": "Unsaved",
    "expandProvider": "Expand provider settings",
    "collapseProvider": "Collapse provider settings",
    "defaultModel": "Default",
    "modelsLabel": "Models",
    "modelCountOne": "1 model",
    "modelCountMany": "{count} models",
    "credentialsIntro": "Set API keys and optional endpoints here. Values are written to config as providers.<id> (same as environment variables). Keys are never returned in full from the gateway.",
    "apiKeyLabel": "API key",
    "regionLabel": "Region",
    "regionHint": "DashScope: pick a region on its card to set region and the official image endpoint (Custom lets you type both).",
    "endpointPresetsHint": "When a card shows endpoint or cluster presets, pick one or use Custom — values are saved as providers.<id>.baseUrl.",
    "baseUrlLabel": "Base URL",
    "imageBaseUrlLabel": "Image base URL",
    "optionalPlaceholder": "Optional",
    "saveCredentials": "Save keys",
    "savingCredentials": "Saving…",
    "credentialsSaved": "Keys saved.",
    "discardCredentials": "Discard keys",
    "credentialsSaveError": "Could not save provider keys.",
    "credentialsNothingToSave": "No credential changes to save.",
    "regionPresetDefault": "Default (gateway chooses)",
    "regionPresetCustom": "Custom region / endpoint",
    "baseUrlPresetDefault": "Default (vendor official)",
    "baseUrlPresetCustom": "Custom URL",
    "openExtensionSettings": "Extension page",
    "openImageModelsPage": "Open Images settings",
    "extensionSettingsLinkTitle": "Open this provider’s extension settings",
    "imageModelsLinkTitle": "Open Images settings for all providers",
    "imageBaseUrlPresetHint": "Filled from the region preset; switch to “Custom” to edit.",
    "dashscopeRegion_beijing": "China (Beijing)",
    "dashscopeRegion_singapore": "International (Singapore)",
    "dashscopeRegion_us": "United States (Virginia)",
    "apiKeyMaskedHelp": "Saved keys are hidden. Click the eye to load the key from your config file (providers.<id>.apiKey only — not from environment variables).",
    "apiKeyCopy": "Copy",
    "apiKeyCopied": "Copied",
    "apiKeyShow": "Show key",
    "apiKeyHide": "Hide key",
    "apiKeyNotInConfigFile": "No API key in the config file for this provider (it may come only from an environment variable).",
    "apiKeyRevealFailed": "Could not load key from the gateway.",
    "minimaxClusterLabel": "MiniMax cluster (API host)",
    "minimaxClusterHint": "MiniMax chooses China vs international by hostname, not a separate region code. The gateway stores that host as providers.minimax.baseUrl (what the runtime reads). DashScope uses providers.dashscope.region plus an image endpoint URL.",
    "falQueueBaseLabel": "Fal queue / API base",
    "falQueueBaseHint": "Fal image calls are rooted at a queue URL (default `https://queue.fal.run`). This maps to `providers.fal.baseUrl`."
  },
  "extensionImageGen": {
    "banner": "API keys and endpoints are stored globally as providers.<id> (same as Settings → Images). Use either page — they stay in sync.",
    "openImageModels": "Open Images settings (all providers)"
  },
  "extensionSttMedia": {
    "banner": "STT credentials are stored in tools.media.audio.providers.<id> (same as Settings → Voice). Use either page — they stay in sync.",
    "openVoice": "Open Voice settings (all STT providers)",
    "credentialsTitle": "STT credentials",
    "credentialsHint": "Edits tools.media.audio.providers.{providerId} and enables STT when you save.",
    "configured": "Configured",
    "notConfigured": "Not configured"
  },
  "appearanceSettings": {
    "pageTitle": "Preferences",
    "subtitle": "Language, appearance, and text size for daily use. Stored in this browser only.",
    "languageTitle": "Language",
    "languageDescription": "Choose the interface language.",
    "themeTitle": "Theme",
    "themeDescription": "Light, dark, or follow your system setting.",
    "colorSchemeTitle": "Color scheme",
    "colorSchemeDescription": "Visual style of the interface.",
    "colorSchemeDefault": "Default",
    "colorSchemeLightGreen": "Light green",
    "colorSchemeModernMono": "Mono",
    "colorSchemeClay": "Clay",
    "fontScaleTitle": "Conversation text size",
    "fontScaleDescription": "Adjust text size in chat and reading areas.",
    "fontScaleCompact": "Small",
    "fontScaleDefault": "Medium",
    "fontScaleLarge": "Large",
    "langOptionEn": "English",
    "langOptionZh": "中文",
    "themeOptionLight": "Light",
    "themeOptionDark": "Dark",
    "themeOptionSystem": "System",
    "openFullPreferences": "Open all settings",
    "quickMenuHint": "Language, theme, and text size",
    "aboutApp": "About",
    "developerGroupTitle": "Developer",
    "developerGroupDescription": "Affects how tool-call results are displayed in chat.",
    "showRawToolDataTitle": "Show tool debugging data",
    "showRawToolDataDescription": "Reveal raw JSON input and output inside tool-call steps to help diagnose issues."
  },
  "mcpSettings": {
    "title": "External tools (MCP)",
    "subtitle": "Configure outbound MCP servers (stdio or HTTP) for embedded agent runs. Disable all MCP tools with tools.disable: [\"bundle-mcp\"] on an agent.",
    "loading": "Loading MCP configuration…",
    "saved": "MCP configuration saved.",
    "save": "Save",
    "discard": "Discard",
    "saving": "Saving…",
    "globalTitle": "Runtime",
    "globalHint": "Session idle TTL controls when unused MCP client runtimes are evicted (0 = never).",
    "idleTtlLabel": "Session idle TTL (minutes)",
    "idleTtlHint": "Default is 10 minutes when unset. Set 0 to disable idle eviction.",
    "idleTtlPlaceholder": "10",
    "serversTitle": "Servers",
    "serversHint": "Each server id becomes the prefix in tool names (server__tool). Extension .mcp.json files merge in automatically.",
    "serversEmpty": "No MCP servers configured yet.",
    "addServer": "Add server",
    "removeServer": "Remove",
    "serverIdPlaceholder": "server-id",
    "serverIdLabel": "Server name",
    "serverCardTitle": "MCP server",
    "cardUntitled": "Untitled server",
    "cardExpandAria": "Expand server settings",
    "cardCollapseAria": "Collapse server settings",
    "transportLabel": "Server type",
    "commandLabel": "Command",
    "argsLabel": "Arguments",
    "argsHint": "Space-separated args (no shell quoting).",
    "cwdLabel": "Working directory",
    "envLabel": "Environment (JSON object)",
    "envHint": "Values may reference ${ENV_VAR}. Dangerous host env keys are filtered at startup.",
    "urlLabel": "Server URL",
    "headersLabel": "Headers",
    "optionalSuffix": "(optional)",
    "headersHint": "Bearer tokens and custom headers for remote MCP servers.",
    "addHeader": "Add header",
    "removeHeader": "Remove header",
    "pasteHeaders": "Paste",
    "pasteHeadersFailed": "Could not parse headers. Paste a JSON object or lines like \"Authorization: Bearer token\".",
    "headerKeyPlaceholder": "Authorization",
    "headerValuePlaceholder": "Bearer your-token",
    "timeoutLabel": "Timeout (optional)",
    "timeoutHint": "Connection, tool list, and tool call timeout in seconds (1–600). Leave empty for the default (30 s).",
    "timeoutPlaceholder": "30",
    "testConnection": "Test",
    "toolsTitle": "MCP tools ({{count}})",
    "toolsSummary": "{{count}} tools discovered",
    "toolsLoading": "Fetching tool list…",
    "toolsEmpty": "No tools returned from this server.",
    "viewAllTools": "View all",
    "toolsDialogTitle": "MCP tool list",
    "toolsDialogSubtitle": "{{serverId}} · {{count}} tools",
    "toolsDialogSearchPlaceholder": "Search by name or description…",
    "toolsDialogSearchEmpty": "No tools match your search.",
    "toolsDialogClose": "Close",
    "disableHint": "To block MCP tools for an agent, add bundle-mcp to tools.disable on Agent defaults or a specific agent.",
    "transportLabels": {
      "stdio": "stdio",
      "sse": "SSE",
      "streamable-http": "Streamable HTTP"
    }
  }
}
