{
  "app": {
    "title": "CC Switch",
    "description": "Claude Code & Codex Provider Switching Tool"
  },
  "common": {
    "add": "Add",
    "edit": "Edit",
    "delete": "Delete",
    "save": "Save",
    "saving": "Saving...",
    "cancel": "Cancel",
    "confirm": "Confirm",
    "close": "Close",
    "done": "Done",
    "settings": "Settings",
    "about": "About",
    "version": "Version",
    "loading": "Loading...",
    "success": "Success",
    "error": "Error",
    "unknown": "Unknown",
    "enterValidValue": "Please enter a valid value",
    "clear": "Clear",
    "toggleTheme": "Toggle theme"
  },
  "apiKeyInput": {
    "placeholder": "Enter API Key",
    "show": "Show API Key",
    "hide": "Hide API Key"
  },
  "jsonEditor": {
    "mustBeObject": "Configuration must be a JSON object, not an array or other type",
    "invalidJson": "Invalid JSON format"
  },
  "claudeConfig": {
    "configLabel": "Claude Code settings.json (JSON) *",
    "writeCommonConfig": "Write Common Config",
    "editCommonConfig": "Edit Common Config",
    "editCommonConfigTitle": "Edit Common Config Snippet",
    "commonConfigHint": "This snippet will be merged into settings.json when 'Write Common Config' is checked",
    "fullSettingsHint": "Full Claude Code settings.json content"
  },
  "header": {
    "viewOnGithub": "View on GitHub",
    "toggleDarkMode": "Switch to Dark Mode",
    "toggleLightMode": "Switch to Light Mode",
    "addProvider": "Add Provider",
    "switchToChinese": "Switch to Chinese",
    "switchToEnglish": "Switch to English",
    "enterEditMode": "Enter Edit Mode",
    "exitEditMode": "Exit Edit Mode"
  },
  "provider": {
    "noProviders": "No providers added yet",
    "noProvidersDescription": "Click the \"Add Provider\" button in the top right to configure your first API provider",
    "currentlyUsing": "Currently Using",
    "enable": "Enable",
    "inUse": "In Use",
    "editProvider": "Edit Provider",
    "editProviderHint": "Configuration will be applied to the current provider immediately after update.",
    "deleteProvider": "Delete Provider",
    "addNewProvider": "Add New Provider",
    "addClaudeProvider": "Add Claude Code Provider",
    "addCodexProvider": "Add Codex Provider",
    "addProviderHint": "Fill in the information to quickly switch providers in the list.",
    "editClaudeProvider": "Edit Claude Code Provider",
    "editCodexProvider": "Edit Codex Provider",
    "configError": "Configuration Error",
    "notConfigured": "Not configured for official website",
    "applyToClaudePlugin": "Apply to Claude plugin",
    "removeFromClaudePlugin": "Remove from Claude plugin",
    "dragToReorder": "Drag to reorder",
    "dragHandle": "Drag to reorder",
    "duplicate": "Duplicate",
    "sortUpdateFailed": "Failed to update sort order",
    "configureUsage": "Configure usage query",
    "name": "Provider Name",
    "namePlaceholder": "e.g., Claude Official",
    "websiteUrl": "Website URL",
    "configJson": "Config JSON",
    "writeCommonConfig": "Write common config",
    "editCommonConfigButton": "Edit common config",
    "configJsonHint": "Please fill in complete Claude Code configuration",
    "editCommonConfigTitle": "Edit common config snippet",
    "editCommonConfigHint": "Common config snippet will be merged into all providers that enable it",
    "addProvider": "Add Provider"
  },
  "notifications": {
    "providerSaved": "Provider configuration saved",
    "providerDeleted": "Provider deleted successfully",
    "switchSuccess": "Switch successful! Please restart {{appName}} terminal to take effect",
    "switchFailed": "Switch failed, please check configuration",
    "autoImported": "Default provider created from existing configuration",
    "saveFailed": "Save failed: {{error}}",
    "saveFailedGeneric": "Save failed, please try again",
    "appliedToClaudePlugin": "Applied to Claude plugin",
    "removedFromClaudePlugin": "Removed from Claude plugin",
    "syncClaudePluginFailed": "Sync Claude plugin failed"
  },
  "confirm": {
    "deleteProvider": "Delete Provider",
    "deleteProviderMessage": "Are you sure you want to delete provider \"{{name}}\"? This action cannot be undone."
  },
  "settings": {
    "title": "Settings",
    "general": "General",
    "tabGeneral": "General",
    "tabAdvanced": "Advanced",
    "language": "Language",
    "languageHint": "Preview interface language immediately after switching, takes effect permanently after saving.",
    "theme": "Theme",
    "themeHint": "Choose the appearance theme for the app, takes effect immediately.",
    "themeLight": "Light",
    "themeDark": "Dark",
    "themeSystem": "System",
    "importExport": "Import/Export Config",
    "importExportHint": "Import or export cc-switch configuration for backup or migration.",
    "exportConfig": "Export Config to File",
    "selectConfigFile": "Select Config File",
    "noFileSelected": "No configuration file selected.",
    "import": "Import",
    "importing": "Importing...",
    "importSuccess": "Import Successful!",
    "importFailed": "Import Failed",
    "configExported": "Config exported to:",
    "exportFailed": "Export failed",
    "selectFileFailed": "Failed to select file",
    "configCorrupted": "Config file may be corrupted or invalid",
    "backupId": "Backup ID",
    "autoReload": "Data will refresh automatically in 2 seconds...",
    "languageOptionChinese": "中文",
    "languageOptionEnglish": "English",
    "windowBehavior": "Window Behavior",
    "windowBehaviorHint": "Configure window minimize and Claude plugin integration policies.",
    "minimizeToTray": "Minimize to tray on close",
    "minimizeToTrayDescription": "When checked, clicking the close button will hide to system tray, otherwise the app will exit directly.",
    "enableClaudePluginIntegration": "Apply to Claude Code extension",
    "enableClaudePluginIntegrationDescription": "When enabled, the VS Code Claude Code extension provider will switch with this app",
    "configDirectoryOverride": "Configuration Directory Override (Advanced)",
    "configDirectoryDescription": "When using Claude Code or Codex in environments like WSL, you can manually specify the configuration directory in WSL to keep provider data consistent with the main environment.",
    "appConfigDir": "CC-Switch Configuration Directory",
    "appConfigDirDescription": "Customize the storage location for CC-Switch configuration files (config.json, etc.)",
    "browsePlaceholderApp": "e.g., C:\\Users\\Administrator\\.cc-switch",
    "claudeConfigDir": "Claude Code Configuration Directory",
    "claudeConfigDirDescription": "Override Claude configuration directory (settings.json).",
    "codexConfigDir": "Codex Configuration Directory",
    "codexConfigDirDescription": "Override Codex configuration directory.",
    "browsePlaceholderClaude": "e.g., /home/<your-username>/.claude",
    "browsePlaceholderCodex": "e.g., /home/<your-username>/.codex",
    "browseDirectory": "Browse Directory",
    "resetDefault": "Reset to default directory (takes effect after saving)",
    "checkForUpdates": "Check for Updates",
    "updateTo": "Update to v{{version}}",
    "updating": "Updating...",
    "checking": "Checking...",
    "upToDate": "Up to Date",
    "aboutHint": "View version information and update status.",
    "portableMode": "Portable mode: updates require manual download.",
    "updateAvailable": "New version available: {{version}}",
    "updateFailed": "Update installation failed, attempted to open download page.",
    "checkUpdateFailed": "Failed to check for updates, please try again later.",
    "openReleaseNotesFailed": "Failed to open release notes",
    "releaseNotes": "Release Notes",
    "viewReleaseNotes": "View release notes for this version",
    "viewCurrentReleaseNotes": "View current version release notes",
    "exportFailedError": "Export config failed:",
    "restartRequired": "Restart Required",
    "restartRequiredMessage": "Modifying the CC-Switch configuration directory requires restarting the application to take effect. Restart now?",
    "restartNow": "Restart Now",
    "restartLater": "Restart Later",
    "restartFailed": "Application restart failed, please manually close and reopen.",
    "devModeRestartHint": "Dev Mode: Automatic restart not supported, please manually restart the application.",
    "saving": "Saving..."
  },
  "apps": {
    "claude": "Claude Code",
    "codex": "Codex"
  },
  "console": {
    "providerSwitchReceived": "Received provider switch event:",
    "setupListenerFailed": "Failed to setup provider switch listener:",
    "updateProviderFailed": "Update provider failed:",
    "autoImportFailed": "Auto import default configuration failed:",
    "openLinkFailed": "Failed to open link:",
    "getVersionFailed": "Failed to get version info:",
    "loadSettingsFailed": "Failed to load settings:",
    "getConfigPathFailed": "Failed to get config path:",
    "getConfigDirFailed": "Failed to get config directory:",
    "detectPortableFailed": "Failed to detect portable mode:",
    "saveSettingsFailed": "Failed to save settings:",
    "updateFailed": "Update failed:",
    "checkUpdateFailed": "Check for updates failed:",
    "openConfigFolderFailed": "Failed to open config folder:",
    "selectConfigDirFailed": "Failed to select config directory:",
    "getDefaultConfigDirFailed": "Failed to get default config directory:",
    "openReleaseNotesFailed": "Failed to open release notes:"
  },
  "providerForm": {
    "supplierName": "Provider Name",
    "supplierNameRequired": "Provider Name *",
    "supplierNamePlaceholder": "e.g., Anthropic Official",
    "websiteUrl": "Website URL",
    "websiteUrlPlaceholder": "https://example.com (optional)",
    "apiEndpoint": "API Endpoint",
    "apiEndpointPlaceholder": "https://your-api-endpoint.com",
    "codexApiEndpointPlaceholder": "https://your-api-endpoint.com/v1",
    "manageAndTest": "Manage & Test",
    "configContent": "Config Content",
    "useConfigWizard": "Use Configuration Wizard",
    "manualConfig": "Manually configure provider, requires complete configuration, or",
    "officialNoApiKey": "Official login does not require API Key, save directly",
    "codexOfficialNoApiKey": "Official does not require API Key, save directly",
    "codexApiKeyAutoFill": "Just fill in here, auth.json below will be auto-filled",
    "kimiApiKeyHint": "Fill in to get model list",
    "apiKeyAutoFill": "Just fill in here, config below will be auto-filled",
    "cnOfficialApiKeyHint": "💡 Opensource official providers only need API Key, endpoint is preset",
    "aggregatorApiKeyHint": "💡 Aggregator providers only need API Key to use",
    "thirdPartyApiKeyHint": "💡 Third-party providers require both API Key and endpoint",
    "customApiKeyHint": "💡 Custom configuration requires manually filling all necessary fields",
    "officialHint": "💡 Official provider uses browser login, no API Key needed",
    "getApiKey": "Get API Key",
    "parameterConfig": "Parameter Config - {{name}} *",
    "mainModel": "Main Model (optional)",
    "mainModelPlaceholder": "e.g., GLM-4.6",
    "fastModel": "Fast Model (optional)",
    "fastModelPlaceholder": "e.g., GLM-4.5-Air",
    "modelHint": "💡 Leave blank to use provider's default model",
    "apiHint": "💡 Fill in Claude API compatible service endpoint",
    "codexApiHint": "💡 Fill in service endpoint compatible with OpenAI Response format",
    "fillSupplierName": "Please fill in provider name",
    "fillConfigContent": "Please fill in configuration content",
    "fillParameter": "Please fill in {{label}}",
    "fillTemplateValue": "Please fill in {{label}}",
    "configJsonError": "Config JSON format error, please check syntax",
    "authJsonRequired": "auth.json must be a JSON object",
    "authJsonError": "auth.json format error, please check JSON syntax",
    "fillAuthJson": "Please fill in auth.json configuration",
    "fillApiKey": "Please fill in OPENAI_API_KEY",
    "visitWebsite": "Visit {{url}}",
    "anthropicModel": "Main Model",
    "anthropicSmallFastModel": "Fast Model",
    "modelPlaceholder": "GLM-4.6",
    "smallModelPlaceholder": "GLM-4.5-Air",
    "modelHelper": "Optional: Specify default Claude model to use, leave blank to use system default.",
    "categoryOfficial": "Official",
    "categoryCnOfficial": "Opensource Official",
    "categoryAggregation": "Aggregation",
    "categoryThirdParty": "Third Party"
  },
  "endpointTest": {
    "title": "API Endpoint Management",
    "endpoints": "endpoints",
    "autoSelect": "Auto Select",
    "testSpeed": "Test",
    "testing": "Testing",
    "addEndpointPlaceholder": "https://api.example.com",
    "done": "Done",
    "noEndpoints": "No endpoints",
    "failed": "Failed",
    "enterValidUrl": "Please enter a valid URL",
    "invalidUrlFormat": "Invalid URL format",
    "onlyHttps": "Only HTTP/HTTPS supported",
    "urlExists": "This URL already exists",
    "saveFailed": "Save failed, please try again",
    "loadEndpointsFailed": "Failed to load custom endpoints:",
    "addEndpointFailed": "Failed to add custom endpoint:",
    "removeEndpointFailed": "Failed to remove custom endpoint:",
    "removeFailed": "Remove failed: {{error}}",
    "updateLastUsedFailed": "Failed to update endpoint last used time",
    "pleaseAddEndpoint": "Please add an endpoint first",
    "testUnavailable": "Speed test unavailable",
    "noResult": "No result returned",
    "testFailed": "Speed test failed: {{error}}"
  },
  "codexConfig": {
    "quickWizard": "Quick Configuration Wizard",
    "authJson": "auth.json (JSON) *",
    "authJsonPlaceholder": "{\n  \"OPENAI_API_KEY\": \"sk-your-api-key-here\"\n}",
    "authJsonHint": "Codex auth.json configuration content",
    "configToml": "config.toml (TOML)",
    "configTomlHint": "Codex config.toml configuration content",
    "writeCommonConfig": "Write Common Config",
    "editCommonConfig": "Edit Common Config",
    "editCommonConfigTitle": "Edit Codex Common Config Snippet",
    "commonConfigHint": "This snippet will be appended to the end of config.toml when 'Write Common Config' is checked",
    "wizardHint": "Enter key parameters, the system will automatically generate standard auth.json and config.toml configuration.",
    "apiKeyLabel": "API Key *",
    "apiKeyPlaceholder": "sk-your-api-key-here",
    "supplierNameLabel": "Provider Name *",
    "supplierNamePlaceholder": "e.g., Codex Official",
    "supplierNameHint": "Will be displayed in the provider list, can use Chinese",
    "supplierCodeLabel": "Provider Code (English)",
    "supplierCodePlaceholder": "custom (optional)",
    "supplierCodeHint": "Will be used as identifier in config file, defaults to custom",
    "apiUrlLabel": "API Request URL *",
    "apiUrlPlaceholder": "https://your-api-endpoint.com/v1",
    "websiteLabel": "Website URL",
    "websitePlaceholder": "https://example.com",
    "websiteHint": "Official website address (optional)",
    "modelNameLabel": "Model Name *",
    "modelNamePlaceholder": "gpt-5-codex",
    "configPreview": "Configuration Preview",
    "applyConfig": "Apply Configuration"
  },
  "providerPreset": {
    "label": "Provider Preset",
    "custom": "Custom Configuration",
    "other": "Other",
    "hint": "You can continue to adjust the fields below after selecting a preset."
  },
  "usage": {
    "queryFailed": "Query failed",
    "refreshUsage": "Refresh usage",
    "planUsage": "Plan usage",
    "invalid": "Expired",
    "total": "Total:",
    "used": "Used:",
    "remaining": "Remaining:"
  },
  "usageScript": {
    "title": "Configure Usage Query",
    "enableUsageQuery": "Enable usage query",
    "presetTemplate": "Preset template",
    "queryScript": "Query script (JavaScript)",
    "timeoutSeconds": "Timeout (seconds)",
    "scriptHelp": "Script writing instructions:",
    "configFormat": "Configuration format:",
    "extractorFormat": "Extractor return format (all fields optional):",
    "tips": "💡 Tips:",
    "testing": "Testing...",
    "testScript": "Test script",
    "format": "Format",
    "saveConfig": "Save config",
    "scriptEmpty": "Script configuration cannot be empty",
    "mustHaveReturn": "Script must contain return statement",
    "testSuccess": "Test successful!",
    "testFailed": "Test failed",
    "formatSuccess": "Format successful",
    "formatFailed": "Format failed",
    "variablesHint": "Supported variables: {{apiKey}}, {{baseUrl}} | extractor function receives API response JSON object",
    "fieldIsValid": "• isValid: Boolean, whether plan is valid",
    "fieldInvalidMessage": "• invalidMessage: String, reason for expiration (shown when isValid is false)",
    "fieldRemaining": "• remaining: Number, remaining quota",
    "fieldUnit": "• unit: String, unit (e.g., \"USD\")",
    "fieldPlanName": "• planName: String, plan name",
    "fieldTotal": "• total: Number, total quota",
    "fieldUsed": "• used: Number, used quota",
    "fieldExtra": "• extra: String, custom display text",
    "tip1": "• Variables {{apiKey}} and {{baseUrl}} are automatically replaced",
    "tip2": "• Extractor function runs in sandbox environment, supports ES2020+ syntax",
    "tip3": "• Entire config must be wrapped in () to form object literal expression"
  },
  "kimiSelector": {
    "modelConfig": "Model Configuration",
    "mainModel": "Main Model",
    "fastModel": "Fast Model",
    "refreshModels": "Refresh Model List",
    "pleaseSelectModel": "Please select a model",
    "noModels": "No models available",
    "fillApiKeyFirst": "Please fill in API Key first",
    "requestFailed": "Request failed: {{error}}",
    "invalidData": "Invalid response data format",
    "fetchModelsFailed": "Failed to fetch model list",
    "apiKeyHint": "💡 Fill in API Key to automatically fetch available model list"
  },
  "presetSelector": {
    "title": "Select Configuration Type",
    "custom": "Custom",
    "customDescription": "Manually configure provider, requires complete configuration",
    "officialDescription": "Official login, no API Key required",
    "presetDescription": "Use preset configuration, only API Key required"
  },
  "mcp": {
    "title": "MCP Management",
    "claudeTitle": "Claude Code MCP Management",
    "codexTitle": "Codex MCP Management",
    "userLevelPath": "User-level MCP path",
    "serverList": "Servers",
    "loading": "Loading...",
    "empty": "No MCP servers",
    "emptyDescription": "Click the button in the top right to add your first MCP server",
    "add": "Add MCP",
    "addServer": "Add MCP",
    "editServer": "Edit MCP",
    "addClaudeServer": "Add Claude Code MCP",
    "editClaudeServer": "Edit Claude Code MCP",
    "addCodexServer": "Add Codex MCP",
    "editCodexServer": "Edit Codex MCP",
    "configPath": "Config Path",
    "serverCount": "{{count}} MCP server(s) configured",
    "enabledCount": "{{count}} enabled",
    "template": {
      "fetch": "Quick Template: mcp-fetch"
    },
    "form": {
      "title": "MCP Title (Unique)",
      "titlePlaceholder": "my-mcp-server",
      "name": "Display Name",
      "namePlaceholder": "e.g. @modelcontextprotocol/server-time",
      "description": "Description",
      "descriptionPlaceholder": "Optional description",
      "tags": "Tags (comma separated)",
      "tagsPlaceholder": "stdio, time, utility",
      "homepage": "Homepage",
      "homepagePlaceholder": "https://example.com",
      "docs": "Docs",
      "docsPlaceholder": "https://example.com/docs",
      "additionalInfo": "Additional Info",
      "jsonConfig": "JSON Configuration",
      "jsonPlaceholder": "{\n  \"type\": \"stdio\",\n  \"command\": \"uvx\",\n  \"args\": [\"mcp-server-fetch\"]\n}",
      "tomlConfig": "TOML Configuration",
      "tomlPlaceholder": "type = \"stdio\"\ncommand = \"uvx\"\nargs = [\"mcp-server-fetch\"]",
      "useWizard": "Config Wizard",
      "syncOtherSide": "Mirror to {{target}}",
      "syncOtherSideHint": "Apply the same settings to {{target}}; existing entries with the same id will be overwritten.",
      "willOverwriteWarning": "Will overwrite existing config in {{target}}"
    },
    "wizard": {
      "title": "MCP Configuration Wizard",
      "hint": "Quickly configure MCP server and auto-generate JSON configuration",
      "type": "Type",
      "typeStdio": "stdio",
      "typeHttp": "http",
      "command": "Command",
      "commandPlaceholder": "npx or uvx",
      "args": "Arguments",
      "argsPlaceholder": "arg1\narg2",
      "env": "Environment Variables",
      "envPlaceholder": "KEY1=value1\nKEY2=value2",
      "url": "URL",
      "urlPlaceholder": "https://api.example.com/mcp",
      "urlRequired": "Please enter URL",
      "headers": "Headers (optional)",
      "headersPlaceholder": "Authorization: Bearer your_token_here\nContent-Type: application/json",
      "preview": "Configuration Preview",
      "apply": "Apply Configuration"
    },
    "id": "Identifier (unique)",
    "type": "Type",
    "command": "Command",
    "validateCommand": "Validate Command",
    "args": "Args",
    "argsPlaceholder": "e.g., mcp-server-fetch --help",
    "env": "Environment (one per line, KEY=VALUE)",
    "envPlaceholder": "FOO=bar\nHELLO=world",
    "reset": "Reset",
    "notice": {
      "restartClaude": "Written. Restart Claude to take effect."
    },
    "msg": {
      "saved": "Saved",
      "deleted": "Deleted",
      "enabled": "Enabled",
      "disabled": "Disabled",
      "templateAdded": "Template added"
    },
    "error": {
      "idRequired": "Please enter identifier",
      "idExists": "Identifier already exists. Please choose another.",
      "jsonInvalid": "Invalid JSON format",
      "tomlInvalid": "Invalid TOML format",
      "commandRequired": "Please enter command",
      "singleServerObjectRequired": "Please paste a single MCP server object (do not include top-level mcpServers)",
      "saveFailed": "Save failed",
      "deleteFailed": "Delete failed"
    },
    "validation": {
      "ok": "Command available",
      "fail": "Command not found"
    },
    "confirm": {
      "deleteTitle": "Delete MCP Server",
      "deleteMessage": "Are you sure you want to delete MCP server \"{{id}}\"? This action cannot be undone."
    },
    "presets": {
      "title": "Select MCP Type",
      "enable": "Enable",
      "enabled": "Enabled",
      "installed": "Installed",
      "docs": "Docs",
      "requiresEnv": "Requires env",
      "fetch": {
        "name": "mcp-server-fetch",
        "description": "Universal HTTP request tool, supports GET/POST and other HTTP methods, suitable for quick API requests and web data scraping"
      },
      "time": {
        "name": "@modelcontextprotocol/server-time",
        "description": "Time query tool providing current time, timezone conversion, and date calculation features"
      },
      "memory": {
        "name": "@modelcontextprotocol/server-memory",
        "description": "Knowledge graph memory system supporting entities, relations, and observations to help AI remember important information from conversations"
      },
      "sequential-thinking": {
        "name": "@modelcontextprotocol/server-sequential-thinking",
        "description": "Sequential thinking tool helping AI break down complex problems into multiple steps for deeper thinking"
      },
      "context7": {
        "name": "@upstash/context7-mcp",
        "description": "Context7 documentation search tool providing latest library docs and code examples, with higher limits when configured with a key"
      }
    }
  }
}
