{
  "title": "Model Configuration",
  "editProvider": "Edit Provider Configuration",
  "newProvider": "New Provider Configuration",
  "editModel": "Edit Model Configuration",
  "newModel": "New Model Configuration",
  "editProviderSubtitle": "Basic Provider Parameters",
  "editSubtitle": "Basic Model Parameters",
  "confirmDelete": "Are you sure you want to delete this configuration?",
  "cliAuth": {
    "sectionTitle": "Local CLI accounts",
    "rescan": "Re-scan",
    "empty": "No signed-in Codex / Gemini CLI accounts detected. Sign in from the terminal first, then re-scan.",
    "import": "Use this account",
    "refresh": "Refresh token",
    "refreshSuccess": "Token refreshed",
    "refreshFailed": "Refresh failed: {{error}}",
    "expiresAt": "Token valid until {{time}}",
    "tokenValid": "Token ready",
    "accountLine": "Account: {{account}}",
    "label": "Authentication",
    "options": {
      "apiKey": "API Key",
      "codexCli": "Codex CLI account",
      "geminiCli": "Gemini CLI account"
    },
    "detected": "Will use the local {{label}} ({{account}})",
    "notDetected": "No signed-in {{kind}} account detected; sign in from the terminal first.",
    "unknownAccount": "current login"
  },
  "providerSelection": {
    "title": "Select Model Provider",
    "or": "or",
    "orSelectProvider": "or select a preset provider",
    "customTitle": "Custom Configuration",
    "customDescription": "Manually configure all parameters, suitable for private deployments or other unlisted providers",
    "getApiKey": "Get API Key",
    "fetchModels": "Fetch Models",
    "fetchHint": "Fetch the model list from the current provider; if it fails, fall back to common preset models",
    "fetchingModels": "Fetching model list...",
    "fetchSuccessCount": "Fetched {{count}} models from the provider",
    "fetchFailedFallback": "Failed to fetch model list, fell back to common preset models",
    "fetchEmptyFallback": "Provider returned no models, fell back to common preset models",
    "fillApiKeyBeforeFetch": "Enter the API key before fetching models",
    "usingPresetModels": "Currently showing common preset models",
    "noPresetModels": "No models available. Fetch the model list or enter a model name manually",
    "backToSelection": "Back to provider selection",
    "selectModel": "Select model",
    "multiSelectHint": "Supports multi-select. After selection, configure context window, max output tokens, and reasoning per model.",
    "searchOrInputModel": "Search or enter model name...",
    "inputModelName": "Enter model name...",
    "useCustomModel": "Press Enter to use",
    "addCustomModel": "Add Custom Model",
    "modelAlreadyInList": "This model is already in the list",
    "reusedExistingModel": "Using the existing model entry for this provider (no duplicate was added)",
    "noModelsSelected": "Select a model first",
    "removeModel": "Remove model",
    "expandModelSettings": "Expand settings for {{name}}",
    "collapseModelSettings": "Collapse settings for {{name}}",
    "urlHint": "Official API URL pre-filled, modify if using proxy or private deployment",
    "formatHint": "Automatically selected based on provider, usually no need to change"
  },
  "providers": {
    "openbitfun": {
      "name": "Sparo Model Platform",
      "description": "Sparo OS model platform"
    },
    "gemini": {
      "name": "Google Gemini",
      "description": "Google Gemini series models"
    },
    "anthropic": {
      "name": "Anthropic Claude",
      "description": "Anthropic Claude series models"
    },
    "minimax": {
      "name": "MiniMax",
      "description": "MiniMax series models"
    },
    "moonshot": {
      "name": "Moonshot AI",
      "description": "Moonshot Kimi series models"
    },
    "deepseek": {
      "name": "DeepSeek",
      "description": "DeepSeek series models"
    },
    "zhipu": {
      "name": "Zhipu AI",
      "description": "Zhipu AI GLM series models",
      "urlOptions": {
        "default": "OpenAI Format - Default",
        "anthropic": "Anthropic Format",
        "codingPlan": "OpenAI Format - CodingPlan"
      }
    },
    "qwen": {
      "name": "Qwen",
      "description": "Alibaba Cloud Bailian Model Platform"
    },
    "volcengine": {
      "name": "Volcano Engine",
      "description": "ByteDance Volcano Engine Model Platform"
    },
    "siliconflow": {
      "name": "SiliconFlow",
      "description": "SiliconFlow Model Platform",
      "urlOptions": {
        "default": "OpenAI Format - Default",
        "anthropic": "Anthropic Format"
      }
    },
    "nvidia": {
      "name": "NVIDIA",
      "description": "NVIDIA NIM Model Platform"
    },
    "openrouter": {
      "name": "OpenRouter",
      "description": "OpenRouter Model Platform"
    }
  },
  "tabs": {
    "api": "API Configuration",
    "proxy": "Proxy Configuration"
  },
  "categories": {
    "all": "All",
    "text": "Text",
    "multimodal": "Image",
    "other": "Utility"
  },
  "category": {
    "label": "Model Category",
    "placeholder": "Select model category",
    "general_chat": "Text Generation",
    "multimodal": "Image Understanding",
    "image_generation": "Image Generation",
    "speech_recognition": "Speech Recognition"
  },
  "categoryIcons": {
    "general_chat": "Text",
    "multimodal": "Vision",
    "image_generation": "Image",
    "speech_recognition": "Speech"
  },
  "categoryHints": {
    "general_chat": "Text Generation: Generate text responses, code, etc. for most conversation scenarios",
    "multimodal": "Image Understanding: Understand image content and have mixed text-image conversations",
    "image_generation": "Image Generation: Generate images from text descriptions",
    "speech_recognition": "Speech Recognition: Convert speech to text (e.g., GLM-ASR)"
  },
  "form": {
    "configName": "Provider Name",
    "configNamePlaceholder": "Enter provider name",
    "modelName": "Model Name",
    "modelSelection": "Select Models",
    "modelNameHint": "GLM-ASR uses glm-asr, other speech models use their corresponding model names",
    "baseUrl": "API URL",
    "resolvedUrlLabel": "Request URL: ",
    "forceUrlHint": "Append # to force use the exact URL you entered",
    "apiKey": "API Key",
    "apiKeyPlaceholder": "Enter your API Key",
    "provider": "Request Format",
    "providerPlaceholder": "Select request format",
    "contextWindow": "Context Window Size",
    "contextWindowHint": "Maximum context window size supported by the model (for calculating token usage percentage)",
    "maxTokens": "Max Output Tokens",
    "maxTokensHint": "Maximum tokens for model output per request (affects response length)",
    "description": "Description",
    "descriptionPlaceholder": "Configuration description (optional)"
  },
  "thinking": {
    "enable": "Enable Thinking",
    "mode": "Reasoning Mode",
    "enableHint": "Requires model to support thinking mode",
    "summaryOn": "thinking on",
    "summaryOff": "thinking off",
    "summaryDefault": "API default",
    "summaryEnabled": "explicit enable",
    "summaryDisabled": "explicit disable",
    "summaryAdaptive": "adaptive",
    "budgetTokens": "Claude Thinking Budget",
    "optionDefault": "API Default",
    "optionEnabled": "Enabled",
    "optionDisabled": "Disabled",
    "optionAdaptive": "Adaptive"
  },
  "reasoningEffort": {
    "label": "Reasoning Effort",
    "hint": "Controls provider-specific reasoning depth for Responses API and supported Claude adaptive reasoning models",
    "placeholder": "Use API default"
  },
  "details": {
    "basicInfo": "Basic Information",
    "modelName": "Model Name",
    "provider": "Request Format",
    "apiUrl": "API URL",
    "contextWindow": "Context Window",
    "maxOutput": "Max Output",
    "description": "Description",
    "capabilities": "Capabilities",
    "tokens": "tokens"
  },
  "proxy": {
    "enable": "Enable Proxy",
    "url": "Proxy URL",
    "urlPlaceholder": "http://127.0.0.1:7890 or socks5://127.0.0.1:1080",
    "urlHint": "Supports HTTP/HTTPS/SOCKS5 proxy, format: protocol://address:port",
    "username": "Username (optional)",
    "usernamePlaceholder": "Proxy authentication username",
    "password": "Password (optional)",
    "passwordPlaceholder": "Proxy authentication password",
    "save": "Save Proxy Configuration",
    "saveSuccess": "Proxy configuration saved, restart IDE to take effect"
  },
  "streamIdleTimeout": {
    "title": "Streaming Timeout",
    "label": "Idle Timeout (seconds)",
    "placeholder": "Leave empty for no timeout",
    "invalid": "Enter a positive integer in seconds, or leave this field empty.",
    "save": "Save Streaming Timeout",
    "saveSuccess": "Streaming timeout saved"
  },
  "capabilities": {
    "text_chat": "Chat",
    "image_understanding": "Vision",
    "image_generation": "Image",
    "function_calling": "Tools",
    "speech_recognition": "Speech"
  },
  "formats": {
    "openaiCompatible": "OpenAI Compatible",
    "responsesApi": "OpenAI Responses API",
    "claudeApi": "Claude API",
    "geminiApi": "Gemini GenerateContent API"
  },
  "providerGroup": {
    "expandModels": "Expand model list for {{name}}",
    "collapseModels": "Collapse model list for {{name}}",
    "modelUnit": "model",
    "deleteProvider": "Delete provider",
    "deleteTitle": "Delete this provider?",
    "deleteMessage": "Remove \"{{name}}\" and all {{count}} model configuration(s) saved under it.",
    "deleteWarning": "This action cannot be undone.",
    "deleteConfirm": "Delete provider"
  },
  "actions": {
    "save": "Save",
    "cancel": "Cancel",
    "edit": "Edit",
    "delete": "Delete",
    "test": "Test Connection",
    "newConfig": "New Configuration",
    "addModel": "Add Model",
    "addProvider": "Add Provider",
    "createFirst": "Create First Configuration"
  },
  "empty": {
    "noModels": "No model configurations",
    "noMatchingModels": "No matching models found"
  },
  "search": {
    "placeholder": "Search model name, provider..."
  },
  "messages": {
    "fillRequired": "Please fill in required fields",
    "fillModelName": "Please fill in model name",
    "duplicateModelNameUnderProvider": "This provider already has a model with this name. Use a different name or edit the existing entry.",
    "saveFailed": "Save failed",
    "deleteFailed": "Failed to delete configuration",
    "loadFailed": "Failed to load AI configuration",
    "testSuccess": "Test successful",
    "testFailed": "Test failed",
    "errorDetails": "Error details",
    "connectionTestMessages": {
      "toolCallsNotDetected": "This test did not detect any tool calls, so tool calling could not be verified this time.",
      "imageInputCheckFailed": "The connection succeeded, but the image input check failed."
    },
    "autoSetPrimary": "Automatically set as primary model",
    "defaultDescription": "{{name}} model configuration",
    "cloneName": "{{name}} - Copy",
    "templateName": "{{provider}} - {{modelName}}",
    "templateDescription": "{{description}} - {{modelName}}"
  },
  "advancedSettings": {
    "title": "Advanced Settings",
    "inlineThinkInText": {
      "label": "Parse <think> Tags In Text",
      "hint": "Split text streams containing <think>...</think> into live reasoning content."
    },
    "skipSslVerify": {
      "label": "Skip SSL Certificate Verification",
      "warning": "Skipping SSL verification is a security risk, use only in test or internal network environments!"
    },
    "customHeaders": {
      "label": "Custom Headers",
      "hint": "Add or modify HTTP request headers",
      "modeLabel": "Apply Mode",
      "modeReplace": "Replace",
      "modeMerge": "Merge",
      "modeReplaceHint": "Custom headers will completely replace default headers (you need to add Content-Type, Authorization, etc.)",
      "modeMergeHint": "Apply default headers first, then apply custom headers (can override existing values, add new values)",
      "addHeader": "Add Field",
      "keyPlaceholder": "key",
      "valuePlaceholder": "value"
    },
    "customRequestBody": {
      "label": "Custom Request Body",
      "hint": "Enter request body fields in JSON format to override default request parameters",
      "modeMerge": "Merge",
      "modeTrim": "Trim",
      "modeMergeHint": "Merge custom fields into the default request body and allow overriding existing fields.",
      "trimHintOpenAI": "Keep only model, messages, max_tokens, and runtime-critical stream / tool fields before applying the custom request body.",
      "trimHintResponses": "Keep only model, input, instructions, max_output_tokens, and runtime-critical stream / tool fields before applying the custom request body.",
      "trimHintAnthropic": "Keep only model, messages, system, max_tokens, and runtime-critical stream / tool fields before applying the custom request body.",
      "trimHintGemini": "Keep only contents, systemInstruction, generationConfig.maxOutputTokens, and tools / toolConfig before applying the custom request body. Gemini model selection comes from the request URL.",
      "placeholder": "Example:\n{\n  \"temperature\": 0.8,\n  \"top_p\": 0.9\n}",
      "invalidJson": "Invalid JSON format, please check syntax",
      "validJson": "JSON format is valid",
      "mergeHint": "Custom fields will override corresponding fields in the default request body"
    }
  }
}
