mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
🌐 i18n(en, zh-CN): sync keys and complete translations (#1600)
Integrated into release/v3.7.0
This commit is contained in:
@@ -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."
|
||||
},
|
||||
|
||||
@@ -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": "预估节省费用",
|
||||
|
||||
Reference in New Issue
Block a user