🌐 i18n(en, zh-CN): sync keys and complete translations (#1600)

Integrated into release/v3.7.0
This commit is contained in:
clousky2020
2026-04-26 02:29:20 +08:00
committed by GitHub
parent cb4ad33703
commit 1f66b67309
2 changed files with 171 additions and 522 deletions

View File

@@ -146,7 +146,6 @@
"dashboard": "Dashboard",
"providers": "Providers",
"combos": "Combos",
"batch": "Batch Jobs",
"usage": "Usage",
"analytics": "Analytics",
"costs": "Costs",
@@ -491,9 +490,6 @@
"noActiveProvidersDesc": "Please add and connect providers first to configure CLI tools.",
"mapModels": "Map Models",
"testConnection": "Test Connection",
"testModel": "Test Model",
"testingModel": "Testing...",
"testModelSuccess": "Model {modelId} working. Latency: {latencyMs}ms",
"connectionStatus": "Connection Status",
"configureEndpoint": "Configure Endpoint",
"instructions": "Instructions",
@@ -639,32 +635,6 @@
"kiloManualConfiguration": "Kilo Code Manual Configuration",
"whenToUseLabel": "When to use",
"openToolDocs": "Open tool docs",
"toolCategories": "Tool Categories",
"toolCategoriesDesc": "Group CLIs by how OmniRoute configures or intercepts them so this page stays easier to scan.",
"autoConfiguredTab": "Auto-configured",
"guidedClientsTab": "Guided clients",
"mitmClientsTab": "MITM clients",
"customCliTab": "Custom CLI",
"allToolsTab": "All tools",
"visibleToolsCount": "{count} visible tools",
"customCliBuilderTitle": "OpenAI-compatible CLI builder",
"customCliBuilderDescription": "Generate env vars and JSON snippets for any CLI or SDK that accepts an OpenAI-compatible base URL, API key, and model ID.",
"customCliNameLabel": "CLI name",
"customCliNamePlaceholder": "e.g. My Team CLI",
"customCliDefaultModelLabel": "Default model",
"customCliDefaultModelHelp": "Use any OmniRoute model ID or combo. Most OpenAI-compatible CLIs only need the /v1 base URL plus a model string.",
"customCliKeyHelper": "For local installs OmniRoute can use sk_omniroute. In cloud mode, pick one of your management API keys.",
"customCliAliasMappingsLabel": "Alias mappings",
"customCliAliasMappingsHelp": "Optional helper aliases for wrapper scripts or config files that want stable shorthand names.",
"customCliAliasPlaceholder": "e.g. review",
"customCliTargetModelLabel": "Target model",
"customCliAddAlias": "Add alias",
"customCliNoMappings": "No alias mappings yet. Add one if your wrapper or team scripts use stable short names.",
"customCliNoModels": "Connect at least one provider to populate the model selectors.",
"customCliEndpointHintLabel": "How to wire the endpoint",
"customCliEndpointHint": "Point any OpenAI-compatible client to the OmniRoute /v1 base URL. The raw chat completions endpoint is {endpoint}. Use the JSON block when the tool wants a provider object, or the env script when it reads OPENAI_* variables.",
"customCliEnvBlockTitle": "Env / shell snippet",
"customCliJsonBlockTitle": "Provider JSON block",
"toolUseCases": {
"claude": "Use when you want strong planning workflows and long multi-file refactors with Claude Code.",
"codex": "Use when your team is standardized on OpenAI Codex CLI flows and profile-based auth.",
@@ -675,13 +645,14 @@
"cursor": "Use when coding in Cursor and you need custom OpenAI-compatible models through OmniRoute.",
"continue": "Use when running Continue in IDEs and you need portable JSON-based provider configuration.",
"opencode": "Use when you prefer terminal-native agent runs and scripted automation via OpenCode.",
"amp": "Use when you want Amp shorthand workflows but still need OmniRoute aliases and routing rules behind them.",
"kiro": "Use when integrating Kiro and controlling model routing centrally from OmniRoute.",
"windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute.",
"antigravity": "Use when Antigravity/Kiro traffic must be intercepted through MITM and routed to OmniRoute.",
"copilot": "Use when you want Copilot chat style UX while enforcing OmniRoute keys and routing rules.",
"qwen": "Use when you need Alibaba Qwen Code CLI for coding tasks.",
"custom": "Use when your CLI or SDK is not hardcoded in OmniRoute but still accepts an OpenAI-compatible base URL, API key, and model string."
"amp": "Use when you want Amp shorthand workflows but still need OmniRoute alias and routing rules enforcement.",
"hermes": "Use when you need a lightweight terminal-native AI assistant for quick tasks.",
"custom": "Use for custom tool implementations or generic OpenAI-compatible configurations."
},
"toolDescriptions": {
"antigravity": "Google Antigravity IDE with MITM",
@@ -694,11 +665,12 @@
"cursor": "Cursor AI Code Editor",
"continue": "Continue AI Assistant",
"opencode": "OpenCode AI coding agent (Terminal)",
"amp": "Sourcegraph Amp coding assistant CLI",
"kiro": "Amazon Kiro — AI-powered IDE",
"windsurf": "Windsurf AI Code Editor",
"copilot": "GitHub Copilot AI Assistant",
"qwen": "Alibaba Qwen Code CLI",
"amp": "Sourcegraph Amp coding assistant CLI",
"hermes": "Hermes AI Terminal Assistant",
"custom": "Generic OpenAI-compatible CLI or SDK configuration generator"
},
"guides": {
@@ -953,6 +925,26 @@
"when": "Use when long sessions must survive account rotation without losing the working context.",
"avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.",
"example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion."
},
"fill-first": {
"when": "Use when you want to fully exhaust one provider's quota before moving to the next.",
"avoid": "Avoid when you need request-level load balancing across providers.",
"example": "Example: Use all $200 Deepgram credits before falling back to Groq."
},
"auto": {
"when": "Use when you need multi-factor scoring routing based on cost, latency, and quality.",
"avoid": "Avoid when you need strict priority ordering or historical persistence.",
"example": "Example: Balance requests across models with different strengths."
},
"lkgp": {
"when": "Use when you want to route based on historical success rates and performance.",
"avoid": "Avoid when historical data is limited or unreliable.",
"example": "Example: Route to models with a good track record on specific tasks."
},
"context-optimized": {
"when": "Use when you need to optimize context window usage across models.",
"avoid": "Avoid when models have similar context lengths or tasks are simple.",
"example": "Example: Distribute long conversations across models with larger context windows."
}
},
"advancedHelp": {
@@ -1097,6 +1089,48 @@
"tip1": "Use at least 2 models for meaningful distribution.",
"tip2": "Works best with equivalent-performance models.",
"tip3": "Ideal for load balancing across multiple API accounts."
},
"fill-first": {
"description": "Exhaust provider quotas sequentially before falling back.",
"tip1": "Use for quota-based routing with clear fallback chains.",
"tip2": "Set quotas accurately to avoid premature fallback.",
"tip3": "Works best with providers offering free tiers or credit buckets.",
"title": "Quota Exhaustion"
},
"auto": {
"description": "Route based on real-time scoring for cost, latency, quality, and health.",
"tip1": "Let the engine balance multiple factors automatically.",
"tip2": "Monitor which factors drive routing decisions in logs.",
"tip3": "Use for complex workloads where no single factor dominates.",
"title": "Multi-Factor Optimization"
},
"lkgp": {
"description": "Route based on historical performance and success patterns.",
"tip1": "Requires sufficient request history for accurate predictions.",
"tip2": "Good for workloads with consistent model performance patterns.",
"tip3": "Monitor prediction accuracy and adjust weights as needed.",
"title": "History-Based Routing"
},
"context-optimized": {
"description": "Optimize routing based on context window usage and token efficiency.",
"tip1": "Route long conversations to models with larger context windows.",
"tip2": "Monitor context utilization to avoid token waste.",
"tip3": "Best for conversational AI requiring extensive context retention.",
"title": "Context Optimization"
},
"context-relay": {
"description": "Best when account rotation is expected and the next account must inherit a simplified task summary.",
"tip1": "Use with providers rotating accounts for the same model family.",
"tip2": "Set handoff threshold below hard quota cutoffs for summary generation time.",
"tip3": "Only set a dedicated summary model if the primary is too expensive or unstable.",
"title": "Session Continuity Priority"
},
"p2c": {
"description": "Route to the provider with the lowest current load based on real-time metrics.",
"tip1": "Monitor provider health metrics for accurate load assessment.",
"tip2": "Works best with homogeneous provider pools.",
"tip3": "Adjust sensitivity to avoid oscillation during traffic spikes.",
"title": "Power of Two Choices"
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1123,14 +1157,26 @@
"failedReorder": "Failed to reorder models",
"builderFlowTitle": "Combo Builder Flow",
"builderStage": {
"basics": { "label": "Basics", "description": "Name and starting template" },
"steps": { "label": "Steps", "description": "Provider, model, and account selection" },
"strategy": { "label": "Strategy", "description": "Routing behavior and advanced settings" },
"basics": {
"label": "Basics",
"description": "Name and starting template"
},
"steps": {
"label": "Steps",
"description": "Provider, model, and account selection"
},
"strategy": {
"label": "Strategy",
"description": "Routing behavior and advanced settings"
},
"intelligent": {
"label": "Smart Routing",
"description": "Auto-routing candidate pool, presets, and scoring"
},
"review": { "label": "Review", "description": "Final validation before saving" }
"review": {
"label": "Review",
"description": "Final validation before saving"
}
},
"builderStageVisited": "Stage completed",
"builderStageCurrent": "Current stage",
@@ -1162,39 +1208,43 @@
"reviewAdvanced": "Advanced Settings",
"reviewAgentFlags": "Agent Flags",
"reviewSequence": "Model Sequence",
"reviewNoSteps": "No steps configured"
"reviewNoSteps": "No steps configured",
"builderStagesDescription": "Complete each stage in order to define combos, build steps, select routing strategy, and review results.",
"builderStepsDescription": "Build each combo step in order: provider, model, then account. This allows reusing the same provider and model across different accounts.",
"selectProvider": "Select Provider",
"selectProviderPlaceholder": "Select a provider",
"selectModel": "Select Model",
"selectModelPlaceholder": "Select a provider first",
"selectAccount": "Select Account",
"selectComboToReference": "Select combo to reference",
"comboReference": "Combo Reference",
"addComboReference": "Add Combo Reference",
"addStepBeforeContinue": "Please add at least one step before proceeding to the next stage.",
"previewNextStep": "Preview next step",
"autoSelectAccount": "Automatically select account at runtime",
"modePackBalanced": "Balanced",
"modePackBudget": "Budget",
"modePackPerformance": "Performance",
"modePackCustom": "Custom",
"browseLegacyCatalog": "Browse legacy combo catalog",
"agentFeaturesTitle": "Agent Features",
"agentFeaturesDescription": "Enable advanced features for agents using this combo",
"agentFeaturesSystemMessageOverride": "Override system message",
"agentFeaturesSystemMessagePlaceholder": "You are an expert assistant...",
"agentFeaturesSystemMessageHint": "System message override for agents",
"agentFeaturesToolFilterRegex": "/regex-pattern/",
"agentFeaturesToolFilterHint": "Tool filter regex for agents",
"agentFeaturesContextCacheHint": "Enable in-context cache for agent tools",
"agentFeaturesContextCacheProtection": "Protect cache from agent tool mutations"
},
"costs": {
"title": "Costs",
"pageDescription": "Track spend across providers, monitor budgets, and manage synced pricing data.",
"budget": "Budget",
"overview": "Overview",
"overviewTitle": "Cost Overview",
"overviewDescription": "Global spend across all API keys, providers, and models using live usage analytics.",
"overviewLoadFailed": "Failed to load cost overview",
"totalCost": "Total Cost",
"breakdown": "Cost Breakdown",
"noData": "No cost data",
"byModel": "By Model",
"byProvider": "By Provider",
"range7d": "7D",
"range30d": "30D",
"range90d": "90D",
"rangeAll": "All",
"spendToday": "Spend Today",
"spend7d": "Spend 7D",
"spend30d": "Spend 30D",
"selectedWindow": "Selected Window",
"requestsInWindow": "Requests",
"activeProviders": "Active Providers",
"activeModels": "Active Models",
"avgCostPerRequest": "Avg Cost / Request",
"costTrend": "Daily Cost Trend",
"providerShare": "Spend by Provider",
"topProviders": "Top Providers",
"topModels": "Top Models",
"noCostDataTitle": "No spend recorded yet",
"noCostDataDescription": "Run traffic through OmniRoute or sync pricing data to populate this dashboard."
"byProvider": "By Provider"
},
"endpoint": {
"title": "API Endpoint",
@@ -1218,8 +1268,6 @@
"embeddingsDesc": "Text embeddings for search & RAG pipelines",
"imageGeneration": "Image Generation",
"imageDesc": "Generate images from text prompts",
"videoGeneration": "Video Generation",
"videoDesc": "Generate videos via ComfyUI, Stable Diffusion WebUI, and compatible providers",
"rerank": "Rerank",
"rerankDesc": "Rerank documents by relevance to a query",
"audioTranscription": "Audio Transcription",
@@ -1582,11 +1630,6 @@
"running": "running",
"runningCount": "{count} running",
"ok": "OK",
"limitExhausted": "Exhausted",
"learnedFromHeaders": "Learned from provider headers",
"remainingOfLimit": "{remaining} / {limit} RPM remaining",
"throttleStatus": "Throttling: {value}",
"lastHeaderUpdate": "Header update: {age} ago",
"activeLockouts": "Active Lockouts",
"resetConfirm": "Reset all circuit breakers to healthy state? This will clear all failure counts and restore all providers to operational status.",
"resetAllTitle": "Reset all circuit breakers to healthy state",
@@ -1609,11 +1652,8 @@
"auditLog": "Audit Log",
"console": "Console",
"auditLogDesc": "Administrative actions and security events",
"runningRequests": "Running Requests",
"runningRequestsDesc": "Requests still in flight across providers and accounts, including sanitized payload previews.",
"loading": "Loading...",
"refresh": "Refresh",
"activeCount": "{count} active",
"filterByAction": "Filter by action...",
"filterByActor": "Filter by actor...",
"filterEntriesAria": "Filter audit log entries",
@@ -1626,32 +1666,10 @@
"search": "Search",
"timestamp": "Timestamp",
"action": "Action",
"status": "Status",
"actor": "Actor",
"target": "Target",
"resourceType": "Resource Type",
"details": "Details",
"ipAddress": "IP Address",
"requestId": "Request ID",
"model": "Model",
"provider": "Provider",
"account": "Account",
"elapsed": "Elapsed",
"count": "Count",
"payloads": "Payloads",
"viewPayloads": "View Payloads",
"clientPayload": "Client Request",
"upstreamPayload": "Upstream Request",
"upstreamNotSentYet": "Upstream request not dispatched yet",
"runningRequestDetailMeta": "Account: {account} • Elapsed: {elapsed}",
"viewDetails": "View Details",
"providerWarningTitle": "Provider warning captured",
"providerWarningDesc": "This request completed with a provider-side warning or sanitizer alert instead of a hard failure.",
"eventMetadata": "Event Metadata",
"eventPayload": "Event Payload",
"auditModalSubtitle": "Actor: {actor} • Target: {target}",
"totalEntries": "{count} total events",
"close": "Close",
"notAvailable": "—",
"noEntries": "No audit log entries found",
"previous": "Previous",
@@ -1726,11 +1744,6 @@
"oauthProviders": "OAuth Providers",
"freeProviders": "Free Providers",
"apiKeyProviders": "API Key Providers",
"llmProviders": "LLM Providers",
"localProviders": "Local / Self-Hosted",
"upstreamProxyProviders": "Upstream Proxy",
"aggregatorsGateways": "Aggregators / Gateways",
"imageProviders": "Image Generation",
"compatibleProviders": "API Key Compatible Providers",
"testAll": "Test All",
"testAllOAuth": "Test all OAuth connections",
@@ -1775,13 +1788,6 @@
"errorOccurred": "An error occurred. Please try again.",
"modelStatus": "Model Status",
"showConfiguredOnly": "Configured only",
"searchProviders": "Search providers...",
"searchProvidersHeading": "Search Providers",
"audioProvidersHeading": "Audio Providers",
"webCookieProviders": "Web / Cookie Providers",
"ccCompatibleLabel": "CC Compatible",
"addCcCompatible": "Add CC Compatible",
"configuredCount": "{configured} of {total} configured",
"allModelsOperational": "All models operational",
"modelsWithIssues": "{count} model(s) with issues",
"allModelsNormal": "All models are responding normally.",
@@ -1803,17 +1809,6 @@
"noActiveConnectionsInGroup": "No active connections found for this group.",
"allTestsPassed": "All {total} tests passed",
"testSummary": "{passed}/{total} passed, {failed} failed",
"expirationBannerExpired": "{count} Provider connection(s) expired",
"expirationBannerExpiringSoon": "{count} Provider connection(s) expiring soon",
"expirationBannerExpiredDesc": "Immediate action required. Expired connections will permanently fail.",
"expirationBannerExpiringSoonDesc": "Please review and renew expiring connections to avoid disruption.",
"zedImportButton": "Import from Zed",
"zedImporting": "Importing...",
"zedImportNone": "No supported OAuth credentials found in Zed IDE.",
"zedImportHint": "Import credentials from Zed IDE",
"zedImportSuccess": "Imported {count} credential(s) from Zed IDE ({providers}).",
"zedImportFailed": "Failed to import from Zed IDE.",
"zedImportNetworkError": "Network error while trying to import from Zed.",
"nameLabel": "Name",
"prefixLabel": "Prefix",
"baseUrlLabel": "Base URL",
@@ -2001,7 +1996,6 @@
"modelRemovedSuccess": "Model removed successfully",
"failedDeleteModelTryAgain": "Failed to delete model. Please try again.",
"compatibleModelsDescription": "Add {type}-compatible models manually or import them from the /models endpoint.",
"ccCompatibleModelsDescription": "CC Compatible available models mirror the OAuth Claude Code provider list.",
"anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229",
"openaiCompatibleModelPlaceholder": "gpt-4o",
"apiKeyValidationFailed": "API key validation failed. Please check your key and try again.",
@@ -2018,8 +2012,6 @@
"save": "Save",
"editConnection": "Edit Connection",
"accountName": "Account name",
"accountConcurrencyCapLabel": "Provider account max concurrent requests",
"accountConcurrencyCapHint": "Maximum simultaneous requests for this provider account. Leave empty or set 0 for no limit. Helps prevent limits enforced by the provider itself before requests fail.",
"email": "Email",
"healthCheckMinutes": "Health Check (min)",
"healthCheckHint": "Proactive token refresh interval. 0 = disabled.",
@@ -2055,121 +2047,7 @@
"statusBanned": "Banned / Sandbox Violation",
"statusCreditsExhausted": "Insufficient Balance / Quota Exhausted",
"showEmails": "Show all emails",
"hideEmails": "Hide all emails",
"upstreamProxyManagedTitle": "Managed via Upstream Proxy Settings",
"upstreamProxyManagedDescription": "CLIProxyAPI is configured as an upstream proxy layer, not as a direct provider connection. Manage the binary/runtime in CLI Tools and enable proxy routing on each provider via the provider proxy controls.",
"openCliTools": "Open CLI Tools",
"openSettings": "Open Settings",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration is needed once an API key is connected.",
"perplexitySearchSharedKeyInfo": "Uses the same API key as Perplexity (chat provider). If you already have Perplexity configured, no additional setup is needed.",
"googlePseInfo": "Google Programmable Search requires two values: your API key and the Search Engine ID (cx) from the Programmable Search Engine dashboard.",
"searxngInfo": "SearXNG is self-hosted. Configure the instance base URL here. API key is optional and can be left blank for public or unauthenticated instances. Local/private URL validation requires OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true.",
"tokenExpiredTitle": "Token expired: {date}",
"tokenExpiredBadge": "Expired",
"tokenExpiresSoonTitle": "Token expires in {minutes}m",
"claudeExtraUsageToggleTitle": "Toggle Claude extra-usage blocking",
"claudeExtraUsageShort": "Block Extra",
"cpaModeEnabledTitle": "Using CLIProxyAPI for deeper Claude Code emulation (uTLS, multi-account, device profiles)",
"cpaModeDisabledTitle": "Enable CLIProxyAPI backend for deeper Claude Code OAuth emulation",
"codex5hToggleTitle": "Toggle Codex 5h limit policy",
"codexWeeklyToggleTitle": "Toggle Codex weekly limit policy",
"weeklyShort": "Weekly",
"toggleOnShort": "ON",
"toggleOffShort": "OFF",
"refreshOauthTokenTitle": "Refresh OAuth token manually",
"tokenShort": "Token",
"supportedEndpointsLabel": "Supported Endpoints",
"supportedEndpointChat": "Chat",
"supportedEndpointEmbeddings": "Embeddings",
"supportedEndpointImages": "Images",
"supportedEndpointAudio": "Audio",
"apiFormatLabel": "API Format",
"imagesShortLabel": "Images",
"audioShortLabel": "Audio",
"searchEngineIdLabel": "Search Engine ID (cx)",
"searchEngineIdHint": "Required. Find this in your Programmable Search Engine overview.",
"searchEngineIdRequired": "Programmable Search Engine ID (cx) is required.",
"ccCompatibleContext1mLabel": "CC Compatible 1M Context",
"ccCompatibleContext1mDescription": "When enabled, this connection appends `anthropic-beta: context-1m-2025-08-07`.",
"ccCompatibleValidationHint": "Validation uses the strict Claude Code-compatible bridge request for this provider.",
"ccCompatibleDetailsTitle": "CC Compatible Details",
"customUserAgentLabel": "Custom User-Agent",
"customUserAgentHint": "Optional override sent upstream as the User-Agent header for this connection.",
"routingTagsLabel": "Routing Tags",
"routingTagsPlaceholder": "fast, cheap, eu-region",
"routingTagsHint": "Comma-separated tags matched against request metadata.tags for tag-based routing.",
"excludedModelsLabel": "Excluded Models",
"excludedModelsPlaceholder": "gpt-5*, claude-opus-*, gemini-*-pro*",
"excludedModelsHint": "Comma-separated wildcard patterns. This connection will be skipped for matching models.",
"consoleApiKeyOracleLabel": "Console API Key (Oracle)",
"consoleApiKeyOraclePlaceholder": "Alibaba Console API Key",
"consoleApiKeyOracleHint": "Required for quota fetching. Do not share.",
"validationModelIdLabel": "Model ID (optional)",
"validationModelIdPlaceholder": "e.g. grok-3 or meta-llama/Llama-3.1-8B-Instruct",
"validationModelIdHint": "Used as a fallback if model listing is unavailable.",
"regionLabel": "Region",
"regionHint": "e.g. us-central1 or europe-west4. Partner models use the global region automatically.",
"accountIdLabel": "Account ID",
"accountIdPlaceholder": "Cloudflare Account ID",
"accountIdHint": "Find it in the Cloudflare dashboard URL or settings.",
"apiRegionLabel": "API Region",
"apiRegionHint": "Select the endpoint region for API access and quota tracking.",
"apiRegionInternational": "International (api.z.ai)",
"apiRegionChina": "China Mainland (open.bigmodel.cn)",
"extraApiKeysLabel": "Extra API Keys",
"extraApiKeysHint": "Round-robin rotation — optional",
"extraApiKeyMasked": "Key #{index}: {prefix}...{suffix}",
"removeThisKey": "Remove this key",
"addAnotherApiKey": "Add another API key...",
"totalKeysRotating": "{count} keys total — rotating round-robin on each request.",
"tagGroupLabel": "Tag / Group",
"tagGroupPlaceholder": "e.g. personal, work, team-a",
"tagGroupHint": "Used to group accounts in the provider view.",
"defaultThinkingStrengthLabel": "Default thinking strength",
"defaultThinkingStrengthHint": "Used when the client does not send a reasoning effort and the global Thinking Budget mode is passthrough.",
"maxConcurrentWholeNumberError": "Max concurrent must be a whole number greater than or equal to 0.",
"codexFastServiceTierLabel": "Codex Fast Service Tier",
"codexFastServiceTierDescription": "When enabled, injects `service_tier=priority` for this connection if the client leaves the tier unset.",
"openaiResponsesStoreLabel": "OpenAI Responses Store",
"openaiResponsesStoreDescription": "Preserves `store`, `previous_response_id`, and adds a stable fallback `session_id` for long Codex sessions. Enable only when the upstream account accepts stored Responses.",
"blockClaudeExtraUsageLabel": "Block Claude Extra Usage",
"blockClaudeExtraUsageDescription": "When enabled, OmniRoute marks this Claude Code account unavailable as soon as the usage API reports `extra_usage.queued`, so fallback switches to another account before extra pay-as-you-go charges continue.",
"hideEmail": "Hide email",
"showEmail": "Show email",
"vertexServiceAccountPlaceholder": "Paste the Service Account JSON here",
"personalAccessTokenLabel": "Personal Access Token",
"sessionCookieLabel": "Session Cookie",
"qoderPatPlaceholder": "Paste your Qoder Personal Access Token",
"qoderPatHint": "Supported path: PAT via qodercli. Browser OAuth remains experimental.",
"grokWebCookiePlaceholder": "Paste your sso cookie value from grok.com",
"grokWebCookieHint": "Paste the sso cookie from grok.com. A full `sso=...` value also works.",
"perplexityWebCookiePlaceholder": "Paste your __Secure-next-auth.session-token value",
"perplexityWebCookieHint": "Paste the __Secure-next-auth.session-token cookie from perplexity.ai.",
"blackboxWebCookiePlaceholder": "Paste your __Secure-authjs.session-token value",
"blackboxWebCookieHint": "Paste the __Secure-authjs.session-token cookie from app.blackbox.ai. A full cookie header also works.",
"museSparkWebCookiePlaceholder": "Paste your abra_sess value",
"museSparkWebCookieHint": "Paste the abra_sess cookie from meta.ai. A full cookie header also works.",
"apiKeyOptionalLabel": "API Key (optional)",
"apiKeyOptionalHint": "Optional. Leave blank if your SearXNG instance does not require authentication.",
"localProviderApiKeyOptionalHint": "Optional. Leave blank if your {provider} endpoint does not require authentication.",
"ccCompatibleNamePlaceholder": "CC Compatible Production",
"ccCompatibleNameHint": "Display name for this provider.",
"ccCompatiblePrefixPlaceholder": "cc",
"ccCompatiblePrefixHint": "Used for aliases such as prefix/model-id.",
"ccCompatibleBaseUrlPlaceholder": "https://example.com/v1",
"ccCompatibleBaseUrlHint": "Base URL for the CC-compatible site. Do not include /messages.",
"ccCompatibleChatPathHint": "Defaults to the strict Claude Code-compatible messages path.",
"compatUpstreamHeaderNamePlaceholder": "Authentication",
"compatUpstreamHeaderValuePlaceholder": "•••",
"azureOpenAiBaseUrlHint": "Required: paste your Azure OpenAI resource endpoint. OmniRoute will append /openai/deployments/{model}/chat/completions?api-version=....",
"bailianBaseUrlHint": "Optional: custom base URL for the bailian-coding-plan provider.",
"xiaomiMimoBaseUrlHint": "Optional: Xiaomi MiMo token-plan base URL. Examples: https://token-plan-ams.xiaomimimo.com/v1, https://token-plan-sgp.xiaomimimo.com/v1, https://token-plan-cn.xiaomimimo.com/v1. The app will append /chat/completions.",
"herokuBaseUrlHint": "Required: paste the Heroku Inference base URL. The app will append /v1/chat/completions.",
"databricksBaseUrlHint": "Required: paste the Databricks serving-endpoints base URL. The app will append /chat/completions.",
"snowflakeBaseUrlHint": "Required: paste the Snowflake account base URL. The app will append /api/v2/cortex/inference:complete.",
"searxngBaseUrlHint": "Required: paste your SearXNG instance base URL. The app will use /search and request format=json. Local/private URLs require OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true for dashboard validation.",
"localProviderBaseUrlHint": "Required: paste your {provider} OpenAI-compatible /v1 base URL (default: {baseUrl}). Local/private URLs require OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS=true for dashboard validation."
"hideEmails": "Hide all emails"
},
"settings": {
"title": "Settings",
@@ -2274,7 +2152,6 @@
"pricingRates": "Pricing Rates Format",
"currentPricing": "Current Pricing Overview",
"loadingPricing": "Loading pricing data...",
"pricingLoadFailed": "Failed to load pricing data",
"noPricing": "No pricing data available",
"input": "Input",
"output": "Output",
@@ -2282,29 +2159,6 @@
"reasoning": "Reasoning",
"cacheCreation": "Cache Creation",
"customPricing": "Custom Pricing",
"pricingSyncTitle": "Pricing Sync",
"pricingSyncDescription": "Trigger LiteLLM sync, inspect sync status, and distinguish synced prices from manual overrides.",
"pricingSyncStatus": "Sync Status",
"syncEnabled": "Periodic sync enabled",
"syncDisabled": "Manual sync only",
"syncedModels": "Synced Models",
"clearSyncedPricing": "Clear Synced",
"clearSyncedPricingConfirm": "Clear all LiteLLM-synced pricing data?",
"clearSyncedPricingSuccess": "Cleared synced pricing data",
"clearSyncedPricingFailed": "Failed to clear synced pricing data",
"clearSyncedPricingFailedWithReason": "Failed to clear synced pricing data: {reason}",
"pricingSourceUser": "Override",
"pricingSourceModelsDev": "models.dev",
"pricingSourceLiteLLM": "LiteLLM",
"pricingSourceDefault": "Default",
"pricingSavedProvider": "Saved pricing for {provider}",
"pricingSaveFailedWithReason": "Failed to save pricing: {reason}",
"pricingResetProvider": "Reset pricing for {provider}",
"pricingResetFailedWithReason": "Failed to reset pricing: {reason}",
"pricingSyncSuccess": "Synced pricing for {count} models",
"pricingSyncFailed": "Pricing sync failed",
"pricingSyncFailedWithReason": "Pricing sync failed: {reason}",
"unknownError": "Unknown error",
"databaseSize": "Database Size",
"backupDb": "Backup Database",
"restoreDb": "Restore Database",
@@ -2565,8 +2419,6 @@
"defaultSafetyNet": "Default Safety Net",
"rpm": "RPM",
"minGap": "Min Gap",
"comboConcurrencyLabel": "Combo round-robin max concurrent requests per model",
"comboConcurrencyHint": "Maximum simultaneous requests per model during combo round-robin. This setting only applies to combo strategies.",
"maxConcurrent": "Max Concurrent",
"activeLimiters": "Active Limiters",
"noActiveLimiters": "No active rate limiters yet.",
@@ -2727,12 +2579,10 @@
"realtime": "Real-Time Translation Activity",
"chatTester": "Chat Tester",
"testBench": "Test Bench",
"streamTransformer": "Stream Transformer",
"liveMonitor": "Live Monitor",
"modeDescriptionPlayground": "Paste any API request body and see how OmniRoute translates it between provider formats (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)",
"modeDescriptionChatTester": "Send real chat requests through OmniRoute and inspect the full round-trip: input, translated request, provider response, and translated output.",
"modeDescriptionTestBench": "Run predefined scenarios and compare compatibility across providers and models.",
"modeDescriptionStreamTransformer": "Transform Chat Completions SSE into Responses API SSE and inspect emitted events.",
"modeDescriptionLiveMonitor": "Watch translation events in real time as requests flow through OmniRoute.",
"modeDescriptionFallback": "Debug, test, and visualize how OmniRoute translates API requests between providers.",
"recentTranslations": "Recent Translations",
@@ -2789,17 +2639,13 @@
"scenarioThinking": "Thinking",
"scenarioSystemPrompt": "System Prompt",
"scenarioStreaming": "Streaming",
"scenarioVision": "Vision",
"scenarioSchemaCoercion": "Schema Coercion",
"templateNames": {
"simple-chat": "Simple Chat",
"tool-calling": "Tool Calling",
"multi-turn": "Multi-turn",
"thinking": "Thinking",
"system-prompt": "System Prompt",
"streaming": "Streaming",
"vision": "Vision",
"schema-coercion": "Schema Coercion"
"streaming": "Streaming"
},
"templateDescriptions": {
"simple-chat": "Basic text message",
@@ -2807,9 +2653,7 @@
"multi-turn": "Conversation with history",
"thinking": "Extended thinking / reasoning",
"system-prompt": "Complex system instructions",
"streaming": "SSE streaming request",
"vision": "Multi-modal request with image input",
"schema-coercion": "Strict tool schema to verify request sanitization"
"streaming": "SSE streaming request"
},
"templatePayloads": {
"simpleChat": {
@@ -2836,16 +2680,6 @@
},
"streaming": {
"prompt": "Tell me a short story about a robot learning to paint."
},
"vision": {
"system": "You are a visual assistant. Describe images with concise, concrete observations.",
"userPrompt": "Describe the image and call out notable objects or colors.",
"imageUrl": "https://images.unsplash.com/photo-1516117172878-fd2c41f4a759?auto=format&fit=crop&w=1200&q=80"
},
"schemaCoercion": {
"userPrompt": "Check the weather for Tokyo and include hourly details.",
"toolDescription": "Look up weather details for a city",
"cityDescription": "City name to inspect"
}
},
"openaiCompatibleLabel": "OpenAI Compatible",
@@ -2871,27 +2705,6 @@
"send": "Send",
"clientRequest": "Client Request",
"clientRequestDescription": "The request body as your client would send it",
"streamTransformerTitle": "Responses Stream Transformer",
"streamTransformerDescription": "Paste a chat completions SSE stream, run it through OmniRoute's Responses transformer, and inspect the emitted response.* events before wiring a client.",
"rawChatSseInput": "Raw chat completions SSE",
"transformToResponses": "Transform to Responses",
"loadTextSample": "Load text sample",
"loadToolSample": "Load tool-call sample",
"transformedResponsesSse": "Transformed Responses API SSE",
"transformedEvents": "Transformed events",
"uniqueEventTypes": "Unique event types",
"inputLines": "Input lines",
"outputLines": "Output lines",
"transformedEventTimeline": "Transformed event timeline",
"transformerTimelineHint": "Run the transformer to inspect emitted response.output_* events in order.",
"eventType": "Event type",
"eventPreview": "Preview",
"comboRouted": "Combo-routed",
"uniqueEndpoints": "Unique endpoints",
"routeDetails": "Route",
"comboBadge": "Combo",
"routeEndpointLabel": "Endpoint",
"routeConnectionLabel": "Conn",
"formatDetected": "Format Detected",
"formatDetectedDescription": "OmniRoute auto-detects the API format from the request structure",
"openaiIntermediate": "OpenAI Intermediate",
@@ -2924,23 +2737,11 @@
"thisMonth": "This Month",
"setLimits": "Set Limits",
"dailyLimitUsd": "Daily Limit (USD)",
"weeklyLimitUsd": "Weekly Limit (USD)",
"monthlyLimitUsd": "Monthly Limit (USD)",
"warningThresholdPercent": "Warning Threshold (%)",
"dailyLimitPlaceholder": "e.g. 5.00",
"weeklyLimitPlaceholder": "e.g. 25.00",
"monthlyLimitPlaceholder": "e.g. 50.00",
"warningThresholdPlaceholder": "80",
"activePeriodSpend": "Active Period Spend",
"intervalLabel": "Interval",
"resetInterval": "Reset Interval",
"resetTimeUtc": "Reset Time (UTC)",
"nextResetUtc": "Next reset (UTC): {value}",
"weeklyLimitSummary": "Weekly limit: {value}",
"notConfigured": "Not configured",
"daily": "Daily",
"weekly": "Weekly",
"monthly": "Monthly",
"saveLimits": "Save Limits",
"budgetOk": "Budget OK — {remaining} remaining",
"budgetExceeded": "Budget exceeded — requests may be blocked",
@@ -2972,45 +2773,6 @@
"evaluateStepDescription": "Responses are compared against expected criteria. See pass/fail for each case with latency metrics and detailed feedback.",
"evalSuites": "Evaluation Suites",
"evalSuitesHint": "Click a suite to view test cases, then run to evaluate your LLM endpoints",
"suiteBuilderNewSuite": "New Suite",
"suiteBuilderCreateTitle": "Create Custom Eval Suite",
"suiteBuilderEditTitle": "Edit Custom Eval Suite",
"suiteBuilderNameLabel": "Suite Name",
"suiteBuilderNamePlaceholder": "Customer support regression suite",
"suiteBuilderDescriptionLabel": "Description",
"suiteBuilderDescriptionPlaceholder": "Explain what this suite validates and why it matters.",
"suiteBuilderCasesTitle": "Custom Cases",
"suiteBuilderCasesHint": "Each case sends a real prompt through OmniRoute and checks the response with contains, exact, or regex matching.",
"suiteBuilderAddCase": "Add Case",
"suiteBuilderCaseCardTitle": "Case {index}",
"suiteBuilderCaseCardHint": "Define one prompt and one assertion for this regression check.",
"suiteBuilderCaseNameLabel": "Case Name",
"suiteBuilderCaseNamePlaceholder": "Refund policy response",
"suiteBuilderCaseModelLabel": "Default Model",
"suiteBuilderCaseModelPlaceholder": "gpt-4o-mini",
"suiteBuilderCaseTagsLabel": "Tags",
"suiteBuilderCaseTagsPlaceholder": "support, regression, billing",
"suiteBuilderCaseTagsHint": "Comma-separated tags stored with the case.",
"suiteBuilderCaseStrategyLabel": "Expected Strategy",
"suiteBuilderCaseSystemPromptLabel": "System Prompt",
"suiteBuilderCaseSystemPromptPlaceholder": "Optional system instruction for this case.",
"suiteBuilderCaseUserPromptLabel": "User Prompt",
"suiteBuilderCaseUserPromptPlaceholder": "Write the exact user input to replay during the eval.",
"suiteBuilderCaseExpectedLabel": "Expected Match",
"suiteBuilderCaseExpectedPlaceholder": "Text or regex that should appear in the model response.",
"suiteBuilderCreateAction": "Create Suite",
"suiteBuilderCreated": "Custom suite created",
"suiteBuilderUpdated": "Custom suite updated",
"suiteBuilderDeleted": "Custom suite deleted",
"suiteBuilderDeleteConfirm": "Delete the custom suite \"{name}\"?",
"suiteBuilderSaveFailed": "Failed to save custom suite",
"suiteBuilderDeleteFailed": "Failed to delete custom suite",
"suiteBuilderNameRequired": "Suite name is required",
"suiteBuilderCasesRequired": "Add at least one case before saving",
"suiteBuilderCaseInvalid": "Case {index} is incomplete. Fill name, model, prompt, and expected value.",
"suiteBuilderCustomBadge": "Custom",
"suiteBuilderBuiltInBadge": "Built-in",
"suiteBuilderUpdatedAt": "Updated {value}",
"evalsLoading": "Loading eval suites...",
"noEvalSuitesFound": "No Eval Suites Found",
"noEvalSuitesDescription": "Eval suites can be defined via the API or in code. They test model outputs against expected results using strategies like contains, regex, exact match, and custom functions.",
@@ -3055,47 +2817,6 @@
"modelComparison": "Model Comparison",
"regressionDetection": "Regression Detection",
"latencyBenchmarks": "Latency Benchmarks",
"evalControlsTitle": "Run Targets",
"evalControlsHint": "Choose a model or combo, optionally compare two targets, and persist the run history in SQLite.",
"evalTarget": "Primary Target",
"evalTargetHint": "Suite defaults preserve the model configured on each test case.",
"evalCompareTarget": "Compare Against",
"evalCompareOptional": "No compare target",
"evalCompareHint": "Optional side-by-side comparison using the same suite.",
"evalApiKey": "Proxy API Key",
"evalApiKeyAuto": "Use dashboard session / no key",
"evalApiKeyHint": "Used only when your `/v1` endpoint requires a bearer key.",
"targetSuiteDefaults": "Suite defaults",
"targetTypeCombo": "Combo",
"targetTypeModel": "Model",
"scorecardTitle": "Persisted Scorecard",
"scorecardHint": "Latest stored pass rates across recent suite runs and targets.",
"scorecardSuites": "Tracked Runs",
"scorecardCases": "Cases Evaluated",
"scorecardPassed": "Cases Passed",
"scorecardPassRate": "Overall Pass Rate",
"recentRunsTitle": "Recent Runs",
"recentRunsHint": "History survives refreshes and now records combo-aware comparisons.",
"historyEmpty": "No persisted runs yet",
"historyLatency": "{value}ms average latency",
"historyColumnSuiteName": "Suite",
"historyColumnTarget": "Target",
"historyColumnPassRate": "Pass Rate",
"historyColumnAvgLatencyMs": "Avg Latency",
"historyColumnCreatedAt": "Ran At",
"runEvalRunning": "Running...",
"runCompletedWithScore": "Run completed at {score}% pass rate",
"compareCompletedWithScore": "Comparison completed. Primary run finished at {score}% pass rate",
"notifySelectDifferentCompareTarget": "Pick a different compare target",
"notifyEvalRunFailedWithReason": "Eval run failed: {reason}",
"notifyEvalLoadFailed": "Failed to load eval dashboard data",
"targetComparisonTitle": "Target Comparison",
"targetComparisonHint": "The same suite was executed against multiple targets.",
"suiteLatestRuns": "Latest Persisted Runs",
"suiteLatestRunsHint": "Stored runs stay available after a page refresh.",
"errorBadge": "Error",
"resultErrorLabel": "Error",
"actualOutputLabel": "Actual: {value}",
"modelLockouts": "Model Lockouts",
"noLockouts": "No models currently locked",
"activeSessions": "Active Sessions",
@@ -3370,10 +3091,9 @@
"commonUseCases": "Common Use Cases",
"clientCompatibility": "Client Compatibility",
"protocolsToc": "Protocols",
"mcpToolsToc": "MCP Tools",
"apiReference": "API Reference",
"managementApiReference": "Management API Reference",
"managementApiDescription": "Operational endpoints for provider management, runtime settings, payload rules, and proxy registry workflows.",
"managementApiDescription": "Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.",
"method": "Method",
"path": "Path",
"notes": "Notes",
@@ -3384,7 +3104,7 @@
"oauthAutoRefresh": "OAuth connection with automatic token refresh.",
"fullStreaming": "Full streaming support for all models.",
"docsLabel": "Docs",
"docsHeroDescription": "AI gateway for multi-provider LLMs. One endpoint for OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor, and 100+ more providers.",
"docsHeroDescription": "AI gateway for multi-provider LLMs. One endpoint for OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor, and 20+ more providers.",
"openDashboard": "Open Dashboard",
"endpointPage": "Endpoint Page",
"github": "GitHub",
@@ -3405,22 +3125,12 @@
"featureRoutingText": "Route requests to 30+ AI providers through a single OpenAI-compatible endpoint. Supports chat, responses, audio, and image APIs.",
"featureCombosTitle": "Combos and Balancing",
"featureCombosText": "Create model combos with fallback chains and balancing strategies: round-robin, priority, random, least-used, and cost-optimized.",
"featureAutoComboTitle": "AutoCombo Routing",
"featureAutoComboText": "Use intent-aware routing, emergency fallback, context-aware model selection, and resilience policies without changing the client payload.",
"featureSearchTitle": "Search, Rerank, and Multimodal APIs",
"featureSearchText": "Expose search, rerank, moderations, images, video, music, speech, and transcription endpoints behind the same OmniRoute base URL.",
"featureUsageTitle": "Usage and Cost Tracking",
"featureUsageText": "Real-time token counting, cost calculation per provider/model, and detailed usage breakdown by API key and account.",
"featureAnalyticsTitle": "Analytics Dashboard",
"featureAnalyticsText": "Visual analytics with charts for requests, tokens, errors, latency, costs, and model popularity over time.",
"featureHealthTitle": "Health Monitoring",
"featureHealthText": "Live health checks, provider status, circuit breaker states, and automatic rate limit detection with exponential backoff.",
"featureMemoryTitle": "Memory and Context Handoffs",
"featureMemoryText": "Persist reusable facts, inject retrieved context into requests, and hand off long-running context across sessions and agent flows.",
"featureSkillsTitle": "Skills and Tool Execution",
"featureSkillsText": "Run registered skills, intercept tool calls, and expose skill execution through dashboard, MCP, and agent workflows.",
"featureAcpTitle": "ACP Workers and Local Agents",
"featureAcpText": "Detect local binaries OmniRoute can spawn as ACP workers, then coordinate them through the Agents and CLI Tools dashboards.",
"featureCliTitle": "CLI Tools",
"featureCliText": "Manage IDE configurations, export/import backups, discover codex profiles, and configure settings from the dashboard.",
"featureSecurityTitle": "Security and Policies",
@@ -3455,20 +3165,8 @@
"clientClaudeBullet1Prefix": "Use",
"clientClaudeBullet1Middle": "(Claude) or",
"clientClaudeBullet1Suffix": "(Antigravity) prefix.",
"clientWindsurfTitle": "Windsurf",
"clientWindsurfBullet1": "Use OmniRoute as the OpenAI-compatible base URL and keep explicit provider prefixes for deterministic routing.",
"clientWindsurfBullet2": "Point models to `/v1/chat/completions` for general chat traffic and preserve `/v1/responses` for Codex-style flows.",
"clientWindsurfBullet3": "Use Dashboard -> CLI Tools when you want a ready-to-copy Windsurf-oriented setup guide.",
"clientClineTitle": "Cline",
"clientClineBullet1": "Cline works well with explicit provider/model prefixes so the router never has to guess the backend.",
"clientClineBullet2": "Use `/v1/chat/completions` for general models and reuse the same OmniRoute base URL across different accounts.",
"clientClineBullet3": "Use the Providers dashboard to verify OAuth/API-key health before debugging Cline runtime issues.",
"clientKimiTitle": "Kimi Coding",
"clientKimiBullet1": "Use OmniRoute as a stable base URL while rotating provider accounts or combos underneath.",
"clientKimiBullet2": "Prefer prefixed models for coding workflows so fallback and audit trails stay explicit.",
"clientKimiBullet3": "Use `/v1/responses` when you want native Responses-style routing for tool-aware clients.",
"protocolsTitle": "Protocols: MCP, A2A, and ACP",
"protocolsDescription": "OmniRoute exposes MCP, A2A, and ACP-oriented worker flows in addition to OpenAI-compatible APIs.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
@@ -3479,60 +3177,20 @@
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolAcpTitle": "ACP (Agent Communication Protocol Workers)",
"protocolAcpDesc": "Use ACP-backed local workers when OmniRoute should spawn and supervise a local binary instead of forwarding over HTTP.",
"protocolAcpStep1": "Open Dashboard -> Agents to verify which local binaries are installed and available as workers.",
"protocolAcpStep2": "Use Dashboard -> CLI Tools when you need client setup instead of worker spawning.",
"protocolAcpStep3": "Pair ACP workers with audit logs and health views to understand what OmniRoute launched and why.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "OpenAI-compatible chat endpoint (default).",
"endpointResponsesNote": "Responses API endpoint (Codex, o-series).",
"endpointCompletionsNote": "Legacy completions endpoint for clients that still send text-completions payloads.",
"endpointModelsNote": "Model catalog for all connected providers.",
"endpointAudioNote": "Audio transcription (Deepgram, AssemblyAI).",
"endpointSpeechNote": "Text-to-speech generation (ElevenLabs, OpenAI TTS).",
"endpointEmbeddingsNote": "Text embedding generation (OpenAI, Cohere, Voyage).",
"endpointModerationsNote": "Moderation and content-safety scoring across supported moderation providers.",
"endpointRerankNote": "Document reranking for retrieval and search post-processing.",
"endpointSearchNote": "Unified web search with provider fallback, analytics, and cost tracking.",
"endpointSearchAnalyticsNote": "Search telemetry and provider analytics for the unified search pipeline.",
"endpointImagesNote": "Image generation (NanoBanana).",
"endpointVideoNote": "Video generation for ComfyUI and SD WebUI-compatible backends.",
"endpointMusicNote": "Music generation via ComfyUI workflow integrations.",
"endpointMessagesNote": "Anthropic-style messages compatibility endpoint for clients that speak message-native payloads.",
"endpointCountTokensNote": "Token counting helper for planning requests before execution.",
"endpointFilesNote": "File upload and artifact storage for batches and larger workflows.",
"endpointBatchesNote": "Batch job creation and retrieval for queued request execution.",
"endpointWsNote": "WebSocket-compatible upgrade path for real-time protocol clients.",
"endpointRewriteChatNote": "Rewrite helper for clients without /v1.",
"endpointRewriteResponsesNote": "Rewrite helper for Responses without /v1.",
"endpointRewriteModelsNote": "Rewrite helper for model discovery without /v1.",
"mcpToolsTitle": "MCP Tool Catalog",
"mcpToolsDescription": "OmniRoute ships {count} MCP tools grouped across routing, operations, cache, memory, and skills.",
"mcpToolsCount": "{count} tools documented",
"mcpToolsRoutingTitle": "Routing and Catalog",
"mcpToolsRoutingDesc": "Read runtime health, inspect combos, check quotas, discover models, and call web search from MCP clients.",
"mcpToolsOperationsTitle": "Operations and Control",
"mcpToolsOperationsDesc": "Dry-run routing, change strategies, test combos, sync pricing, inspect session state, and diagnose runtime issues.",
"mcpToolsCacheTitle": "Cache Controls",
"mcpToolsCacheDesc": "Inspect hit rates and flush cache state without leaving the MCP client.",
"mcpToolsMemoryTitle": "Memory",
"mcpToolsMemoryDesc": "Search, add, and clear persisted OmniRoute memory entries from the same protocol surface.",
"mcpToolsSkillsTitle": "Skills",
"mcpToolsSkillsDesc": "List enabled skills, turn them on, execute them, and inspect execution history from MCP.",
"mgmtProvidersListNote": "List configured provider connections and their current status.",
"mgmtProvidersCreateNote": "Create a new managed provider connection from the dashboard control plane.",
"mgmtProvidersUpdateNote": "Update provider credentials, metadata, and operational flags.",
"mgmtProvidersDeleteNote": "Delete a provider connection and remove it from routing.",
"mgmtProvidersTestNote": "Run a live connection test against the selected provider account.",
"mgmtProvidersModelsNote": "Discover, cache, or inspect models exposed by one provider connection.",
"mgmtSettingsGetNote": "Read the main runtime settings used by the dashboard and router.",
"mgmtSettingsUpdateNote": "Update shared runtime settings without editing environment files directly.",
"mgmtPayloadRulesGetNote": "Read payload normalization and provider-specific payload rule configuration.",
"mgmtPayloadRulesUpdateNote": "Update payload rewrite rules used before provider dispatch.",
"mgmtProxiesListNote": "List saved proxy registry items (supports pagination).",
"mgmtProxiesCreateNote": "Create a reusable proxy item in the registry.",
"mgmtProxiesHealthNote": "Get 24h/rolling health metrics per saved proxy from proxy logs.",
@@ -3612,35 +3270,22 @@
"termsSection6Text": "OmniRoute is open-source software. You are free to inspect, modify, and distribute it under the terms of its license."
},
"agents": {
"title": "Local ACP Agents (Workers)",
"description": "Discover installed CLI binaries that OmniRoute can spawn locally as ACP workers to execute tasks, read local files, and act as the final execution proxy.",
"architectureTitle": "ACP execution flow",
"architectureDescription": "This screen is for binaries OmniRoute launches locally as workers. OmniRoute detects the binary, spawns it, and uses it as the final execution endpoint.",
"cliToolsRedirectTitle": "Looking for client configuration?",
"cliToolsRedirectDesc": "Use CLI Tools when you want your editor or terminal client to call OmniRoute over HTTP instead of being spawned locally.",
"cliToolsRedirectCta": "Go to CLI Tools",
"flowOmniRoute": "OmniRoute",
"flowSpawn": "Spawns worker",
"flowLocalBinary": "Local binary",
"flowExecute": "Executes task",
"title": "CLI Agents",
"description": "Discover installed CLI agents on your system. Add custom agents for auto-detection.",
"refresh": "Refresh",
"installed": "Installed",
"notFound": "Not Found",
"builtIn": "Built-in",
"custom": "Custom",
"remove": "Remove",
"addCustomAgent": "Add Custom ACP Worker",
"addCustomAgentDesc": "Register any local binary OmniRoute should detect and manage as a worker. It will be rescanned automatically on refresh.",
"addCustomAgent": "Add Custom Agent",
"addCustomAgentDesc": "Register any CLI tool for detection. It will be scanned automatically on refresh.",
"agentName": "Agent Name",
"agentNamePlaceholder": "e.g. My Custom Worker",
"binaryName": "Binary Name",
"binaryNamePlaceholder": "e.g. my-worker",
"versionCommand": "Version Command",
"versionCommandPlaceholder": "e.g. my-worker --version",
"spawnArgs": "Spawn Args",
"spawnArgsPlaceholder": "e.g. --quiet, --json",
"addAgent": "Add Worker",
"scanning": "Scanning local ACP workers...",
"addAgent": "Add Agent",
"scanning": "Scanning system for CLI agents...",
"opencodeIntegration": "OpenCode Integration",
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
@@ -3648,10 +3293,10 @@
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Discover local binaries",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries, versions, and worker availability.",
"setupGuideCustomAgentTitle": "Register custom worker",
"setupGuideCustomAgentDesc": "Use Add Custom ACP Worker when your binary is not in the built-in list. Provide the binary name, version command, and optional spawn args.",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},

View File

@@ -511,7 +511,7 @@
"yearsAgoShort": "{count}年前",
"runtimeCheckFailed": "运行时检查失败",
"yourApiKeyPlaceholder": "你的 API 密钥",
"modelPlaceholder": "provider/model-id",
"modelPlaceholder": "提供商/模型 ID",
"configurationSaved": "配置保存成功。",
"failedToSave": "保存配置失败。",
"noApiKeysCreateOne": "无 API 密钥 - 在“密钥”页面创建一个",
@@ -649,7 +649,10 @@
"windsurf": "当您需要 Windsurf AI IDE 并通过 OmniRoute 路由模型时使用。",
"antigravity": "当必须通过 MITM 拦截 Antigravity/Kiro 流量并将其路由到 OmniRoute 时使用。",
"copilot": "当您想要 Copilot 聊天风格的 UX 同时强制执行 OmniRoute 键和路由规则时使用。",
"qwen": "当您需要使用阿里云 Qwen Code CLI 进行编码任务时使用。"
"qwen": "当您需要使用阿里云 Qwen Code CLI 进行编码任务时使用。",
"amp": "当您想要 Amp 简写工作流,但仍需要 OmniRoute 别名和路由规则支持时使用。",
"hermes": "当您需要轻量级终端原生 AI 助手来处理快速任务时使用。",
"custom": "用于自定义工具实现或通用 OpenAI 兼容配置。"
},
"toolDescriptions": {
"antigravity": "带 MITM 的 Google Antigravity IDE",
@@ -665,7 +668,10 @@
"kiro": "Amazon Kiro - AI 驱动 IDE",
"windsurf": "Windsurf AI Code Editor",
"copilot": "GitHub Copilot AI Assistant",
"qwen": "Alibaba Qwen Code CLI"
"qwen": "Alibaba Qwen Code CLI",
"amp": "Sourcegraph Amp 编程助手 CLI",
"hermes": "Hermes AI 终端助手",
"custom": "通用 OpenAI 兼容 CLI 或 SDK 配置生成器"
},
"guides": {
"cursor": {
@@ -683,7 +689,7 @@
"desc": "开启 “OpenAI API key” 选项"
},
"3": {
"title": "Base URL"
"title": "基础 URL"
},
"4": {
"title": "API密钥"
@@ -735,7 +741,7 @@
"title": "选择模型"
},
"5": {
"title": "Use Thinking Variant",
"title": "使用思考变体",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
@@ -768,24 +774,24 @@
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"title": "打开 AI 设置",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"title": "添加自定义提供商",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"title": "基础 URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"title": "API 密钥",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
"title": "选择模型",
"desc": "从下拉菜单中选择一个模型"
}
}
}
@@ -1206,7 +1212,6 @@
"builderProviderFirst": "请先选择提供商",
"builderAccount": "账户",
"builderPreview": "预览",
"builderAddStep": "添加步骤",
"builderComboRef": "组合引用",
"builderAddComboRef": "添加组合引用",
"builderComboRefStep": "添加组合引用步骤",
@@ -1731,7 +1736,6 @@
"errorOccurred": "发生错误。请再试一次。",
"modelStatus": "模型状态",
"showConfiguredOnly": "仅显示已配置",
"searchProviders": "搜索提供商...",
"allModelsOperational": "所有模型运行正常",
"modelsWithIssues": "{count} 有问题的模型",
"allModelsNormal": "所有模型当前响应正常。",
@@ -1835,7 +1839,7 @@
"connectionCountLabel": "{count, plural, one {# 个连接} other {# 个连接}}",
"messagesPath": "messages",
"responsesPath": "responses",
"chatCompletionsPath": "chat/completions",
"chatCompletionsPath": "聊天补全路径",
"add": "添加",
"edit": "编辑",
"delete": "删除",
@@ -1988,9 +1992,9 @@
"statusCreditsExhausted": "余额不足 / 配额已耗尽",
"showEmails": "显示所有邮箱",
"hideEmails": "隐藏所有邮箱",
"imagesGenerations": "Images Generations",
"imagesGenerations": "图像生成",
"audioSpeech": "Audio Speech",
"audioTranscriptions": "Audio Transcriptions",
"audioTranscriptions": "音频转录",
"embeddings": "Embeddings"
},
"settings": {
@@ -2238,7 +2242,7 @@
"stickyLimitDesc": "切换前每个账户连续处理的请求次数",
"modelAliases": "模型别名",
"modelAliasesTitle": "模型别名",
"modelAliasesDesc": "Remap model names using exact matches or wildcard patterns.",
"modelAliasesDesc": "使用精确匹配或通配符模式映射模型名称。",
"addCustomAlias": "添加自定义别名",
"deprecatedModelId": "已弃用的模型 ID",
"newModelId": "新模型 ID",
@@ -2492,27 +2496,27 @@
"maintenance": "维护",
"purgeExpiredLogs": "清理过期日志",
"purgeLogsFailed": "清理日志失败",
"contextOpt": "Context Optimized",
"contextOptDesc": "Routes based on context window requirements and conversation length",
"priorityDesc": "Sequential fallback - tries provider 1 first, then provider 2, and so on",
"weightedDesc": "Distributes traffic by percentage weights across providers",
"modelRoutingTitle": "Model Routing Rules",
"modelRoutingDesc": "Automatically route models to specific combos using glob patterns",
"contextOpt": "上下文优化",
"contextOptDesc": "根据上下文窗口需求和对话长度路由请求。",
"priorityDesc": "顺序回退 - 先尝试提供商 1然后提供商 2...",
"weightedDesc": "按百分比权重在提供商间分配流量。",
"modelRoutingTitle": "模型路由规则",
"modelRoutingDesc": "使用 glob 模式自动将模型路由到特定组合。",
"addRule": "Add Rule",
"routeToCombo": "Route to Combo",
"selectCombo": "Select combo...",
"priorityHint": "Higher = checked first. Use 10+ for specific patterns.",
"patternHint": "Use * for any chars, ? for single char. Case-insensitive.",
"noRoutingRules": "No routing rules configured. Requests use the global combo by default.",
"selectCombo": "选择组合...",
"priorityHint": "数值越高 = 优先检查。特定模式使用 10+。",
"patternHint": "使用 * 匹配任意字符,? 匹配单个字符。不区分大小写。",
"noRoutingRules": "未配置路由规则。请求将使用全局组合基准。",
"routingRuleHint": "Add a rule like claude-opus* -> frontier-combo to automatically route requests.",
"deleteRoutingRule": "Delete this model routing rule?",
"deleteRoutingRule": "删除此模型路由规则?",
"exactMatchMode": "Exact Match",
"wildcardPatternMode": "Wildcard Pattern",
"exactMatchModeDesc": "Use exact aliases for deprecated or renamed model IDs.",
"wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.",
"noExactAliasesConfigured": "No exact-match aliases configured.",
"wildcardPatternMode": "通配符模式",
"exactMatchModeDesc": "为已弃用或重命名的模型 ID 使用精确别名。",
"wildcardPatternModeDesc": "当一系列模型应使用相同别名时,使用带 * 和 ? 的通配符。",
"noExactAliasesConfigured": "未配置精确匹配别名。",
"wildcardRulesTitle": "Wildcard Rules",
"noWildcardAliasesConfigured": "No wildcard aliases configured."
"noWildcardAliasesConfigured": "未配置通配符别名。"
},
"translator": {
"title": "翻译器",
@@ -2932,7 +2936,7 @@
"forgotPassword": "忘记密码?",
"defaultPasswordHint": "默认密码CHANGEME除非已设置 INITIAL_PASSWORD",
"Authorization": "Authorization",
"Content-Disposition": "Content-Disposition",
"Content-Disposition": "内容分发",
"waitingForAuthorization": "正在等待授权...",
"waitingForGoogleAuthorization": "正在等待 Google 授权...",
"waitingForOpenAIAuthorization": "正在等待 OpenAI 授权...",
@@ -3327,12 +3331,12 @@
"cacheHitRate": "缓存命中率",
"cacheRate": "缓存率",
"cacheRateDesc": "占总请求数",
"cachedTokens": "Cache Read Tokens",
"cacheCreationTokens": "Cache Write Tokens",
"cachedTokens": "缓存读取令牌",
"cacheCreationTokens": "缓存写入令牌",
"cacheMetrics": "Prompt 缓存指标",
"withCacheControl": "含缓存控制",
"cachedTokensRead": "Read from cache",
"cacheCreationWrite": "Written to cache",
"cachedTokensRead": "从缓存读取",
"cacheCreationWrite": "写入到缓存",
"cacheReuseRatio": "缓存复用率",
"cacheReuseRatioDesc": "Cache read tokens / 输入 Tokens 总量",
"estCostSaved": "预估节省费用",