Merge branch 'dev-rebased' into release/v3.4.2

This commit is contained in:
diegosouzapw
2026-04-01 02:18:23 -03:00
41 changed files with 4440 additions and 229 deletions

View File

@@ -32,6 +32,46 @@ jobs:
- run: npm run typecheck:core
- run: npm run typecheck:noimplicit:core
i18n:
name: i18n Validation
runs-on: ubuntu-latest
continue-on-error: true
strategy:
fail-fast: false
matrix:
lang: ${{ fromJson(needs.i18n-matrix.outputs.langs) }}
needs: i18n-matrix
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v6.2.0
with:
python-version: '3.12'
- name: Validate ${{ matrix.lang }}
run: |
echo "Validating language: ${{ matrix.lang }}"
python3 scripts/validate_translation.py quick -l '${{ matrix.lang }}'
- name: Report to summary
if: always()
run: |
echo "### ${{ matrix.lang }} Translation Report" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
python3 scripts/validate_translation.py quick -l '${{ matrix.lang }}' >> $GITHUB_STEP_SUMMARY 2>&1
echo '```' >> $GITHUB_STEP_SUMMARY
i18n-matrix:
name: Build language matrix
runs-on: ubuntu-latest
outputs:
langs: ${{ steps.langs.outputs.langs }}
steps:
- uses: actions/checkout@v4
- name: Generate language list
id: langs
run: |
LANG_DIR="src/i18n/messages"
LANGS=$(ls "$LANG_DIR"/*.json | xargs -n1 basename | sed 's/.json$//' | grep -v '^en$' | jq -R . | jq -s . | jq -c .)
echo "langs=${LANGS}" >> $GITHUB_OUTPUT
security:
name: Security Audit
runs-on: ubuntu-latest

View File

@@ -712,7 +712,7 @@ export async function handleChatCore({
log?.debug?.("FORMAT", "native codex passthrough enabled");
} else if (isClaudePassthrough && preserveCacheControl) {
// Pure passthrough: when preserveCacheControl is true, forward the body
// as-is without any normalization. The OpenAI round-trip would strip
// as-is without normalization. The OpenAI round-trip would strip
// cache_control markers; even prepareClaudeRequest can alter structure.
// Claude Code sends well-formed Messages API payloads — trust it.
translatedBody = { ...body };

View File

@@ -402,12 +402,13 @@ export function translateNonStreamingResponse(
* Helper to convert an OpenAI chat.completion JSON object to Claude format for non-streaming.
*/
function convertOpenAINonStreamingToClaude(openaiResponse: JsonRecord): JsonRecord {
const isChoicesArray = Array.isArray(openaiResponse.choices);
const choices = openaiResponse.choices as unknown[] | undefined;
const isChoicesArray = Array.isArray(choices);
if (!isChoicesArray && openaiResponse.object !== "chat.completion") {
return openaiResponse; // If it doesn't look like OpenAI, return as-is
}
const choice = isChoicesArray ? openaiResponse.choices[0] : null;
const choice = isChoicesArray ? choices[0] : null;
const choiceObj = choice ? toRecord(choice) : {};
const messageObj = choiceObj.message ? toRecord(choiceObj.message) : {};

View File

@@ -115,6 +115,7 @@
"uuid": "^13.0.0",
"wreq-js": "^2.0.1",
"yazl": "^3.3.1",
"js-yaml": "^4.1.0",
"zod": "^4.3.6",
"zustand": "^5.0.10"
},

View File

@@ -8,6 +8,7 @@ const API_ROOT = path.join(ROOT, "src", "app", "api");
const FILE_NAME = "route.ts";
const REQUEST_JSON_REGEX = /request\.json\s*\(/;
const VALIDATE_BODY_REGEX = /\bvalidateBody\s*\(/;
const SAFE_PARSE_REGEX = /\.safeParse\s*\(/;
/**
* Walk directory recursively and collect route files.
@@ -43,13 +44,14 @@ const missingValidation = [];
for (const fullPath of routeFiles) {
const source = fs.readFileSync(fullPath, "utf8");
if (!REQUEST_JSON_REGEX.test(source)) continue;
if (!VALIDATE_BODY_REGEX.test(source)) {
// Accept either validateBody() or .safeParse() as validation
if (!VALIDATE_BODY_REGEX.test(source) && !SAFE_PARSE_REGEX.test(source)) {
missingValidation.push(path.relative(ROOT, fullPath));
}
}
if (missingValidation.length > 0) {
console.error("[t06:route-validation] FAIL - routes with request.json() without validateBody():");
console.error("[t06:route-validation] FAIL - routes with request.json() without validateBody() or .safeParse():");
for (const file of missingValidation) {
console.error(` - ${file}`);
}

View File

@@ -7,6 +7,7 @@ const ROOT = process.cwd();
const APP_DIR = path.join(ROOT, "src", "app");
const MESSAGES_DIR = path.join(ROOT, "src", "i18n", "messages");
const REPORTS_DIR = path.join(ROOT, "docs", "reports");
const I18N_README_DIR = path.join(ROOT, "docs", "i18n");
const PRIORITY_LOCALES = ["es", "fr", "de", "ja", "ar"];
@@ -187,36 +188,43 @@ async function runAutomatedChecks() {
}
const readmeLabelChecks = [];
const readmeExpectedPrefix = {
"README.es.md": "🌐 **Disponible en:**",
"README.fr.md": "🌐 **Disponible en :**",
"README.de.md": "🌐 **Verfugbar in:**",
"README.ja.md": "🌐 **対応言語:**",
"README.ar.md": "🌐 **متوفر باللغات:**",
};
// Check that README has language selector line with emoji flag
const expectedPattern = /^🌐 \*\*Languages:\*\*/;
for (const [file, expectedPrefix] of Object.entries(readmeExpectedPrefix)) {
const content = await fs.readFile(path.join(ROOT, file), "utf8");
const line = content.split("\n").find((entry) => entry.startsWith("🌐 **")) || "";
for (const code of PRIORITY_LOCALES) {
const readmePath = path.join(I18N_README_DIR, code, "README.md");
let content = "";
try {
content = await fs.readFile(readmePath, "utf8");
} catch {
// Skip if README doesn't exist
continue;
}
const line = content.split("\n").find((entry) => entry.startsWith("🌐 **Languages:**")) || "";
const ok = expectedPattern.test(line);
// Accept both ASCII-only and umlaut versions for DE prefix.
const ok =
file !== "README.de.md"
? line.startsWith(expectedPrefix)
: line.startsWith("🌐 **Verfügbar in:**") || line.startsWith(expectedPrefix);
readmeLabelChecks.push({ file, ok, line });
readmeLabelChecks.push({ file: `docs/i18n/${code}/README.md`, ok, line });
}
const jaReadme = await fs.readFile(path.join(ROOT, "README.ja.md"), "utf8");
const arReadme = await fs.readFile(path.join(ROOT, "README.ar.md"), "utf8");
let anchorLineRemoved = true;
let brAppendixRemoved = true;
const anchorLineRemoved =
!jaReadme.includes("**[English](#-omniroute--the-free-ai-gateway)**") &&
!arReadme.includes("**[English](#-omniroute--the-free-ai-gateway)**");
const brAppendixRemoved =
!jaReadme.includes("## 🇧🇷 OmniRoute") && !arReadme.includes("## 🇧🇷 OmniRoute");
// Check specific languages (ar, ja) for legacy content
const legacyCheckLocales = ["ar", "ja"];
for (const code of legacyCheckLocales) {
const readmePath = path.join(I18N_README_DIR, code, "README.md");
try {
const content = await fs.readFile(readmePath, "utf8");
if (content.includes("**[English](#-omniroute--the-free-ai-gateway)**")) {
anchorLineRemoved = false;
}
if (content.includes("## 🇧🇷 OmniRoute")) {
brAppendixRemoved = false;
}
} catch {
// Skip if README doesn't exist
}
}
return {
localeCodes,
@@ -263,7 +271,7 @@ async function main() {
}
automatedChecksLines.push(
`- Prefixo local do seletor de idiomas em README (es/fr/de/ja/ar): **${automated.readmeLabelChecks.every((item) => item.ok) ? "OK" : "FALHAS"}**`,
`- Language selector (🌐 **Languages:**) in README (es/fr/de/ja/ar): **${automated.readmeLabelChecks.every((item) => item.ok) ? "OK" : "FALHAS"}**`,
`- Linha legacy EN/PT removida em ja/ar: **${automated.anchorLineRemoved ? "OK" : "PENDENTE"}**`,
`- Apêndice "## 🇧🇷 OmniRoute" removido em ja/ar: **${automated.brAppendixRemoved ? "OK" : "PENDENTE"}**`,
"- RTL habilitado globalmente para `ar` e `he` via `dir=rtl` no layout."

View File

@@ -242,6 +242,41 @@ def find_untranslated(source: Dict, trans: Dict) -> Set[str]:
return untranslated
def find_placeholder_issues(source: Dict, trans: Dict) -> List[Tuple[str, str, str]]:
"""
Find placeholder mismatches between source and translation.
Only checks top-level placeholders like {count}, {day}, NOT ICU inner content.
Returns list of (key, source_placeholder, trans_placeholder)
"""
source_keys = get_all_keys(source)
issues = []
for key in source_keys:
source_val = get_value_by_path(source, key)
trans_val = get_value_by_path(trans, key)
if source_val is None or trans_val is None:
continue
if not isinstance(source_val, str) or not isinstance(trans_val, str):
continue
# Only extract top-level placeholders: {name}, {count}, {day}, NOT {# X} inside ICU
import re
# Extract variable names from placeholders (e.g., 'name' from '{name}' or 'count' from '{count, plural, ...}')
# This avoids false positives on ICU strings where the internal text is translated.
placeholder_regex = r'\{\s*([a-zA-Z][a-zA-Z0-9_]*)'
source_placeholders = set(re.findall(placeholder_regex, source_val))
trans_placeholders = set(re.findall(placeholder_regex, trans_val))
# Check for missing placeholders
missing = source_placeholders - trans_placeholders
if missing:
issues.append((key, str(source_placeholders), str(trans_placeholders)))
return issues
def compare_category(source: Dict, trans: Dict, category: str) -> Tuple[bool, List[str]]:
"""Compare a specific category, return (complete, missing_keys)"""
if category not in source:
@@ -315,6 +350,20 @@ def generate_report():
else:
print_success("All keys appear to be translated!")
# Placeholder issues
print_header("Placeholder Mismatches")
placeholder_issues = find_placeholder_issues(source, trans)
if placeholder_issues:
print(f"{YELLOW}Found {len(placeholder_issues)} placeholder mismatches:{NC}")
for key, src_ph, trans_ph in placeholder_issues[:20]:
print(f" - {key}")
print(f" Source: {src_ph}")
print(f" Trans: {trans_ph}")
if len(placeholder_issues) > 20:
print(f" ... and {len(placeholder_issues) - 20} more")
else:
print_success("All placeholders match!")
# Per-category status
print_header("Per-Category Status")
for category in sorted(source.keys()):
@@ -349,7 +398,18 @@ def quick_check() -> int:
print(f"Missing: {len(missing)}")
print(f"Untranslated: {len(untranslated)}")
return 0 if not missing and not untranslated else 1
# Exit codes:
# 0 = OK
# 1 = generic error
# 2 = missing string in translation
# 3 = untranslated (soft warning - not a failure)
if missing:
return 2
# untranslated is a soft warning, not a failure - translations exist, just not localized
if untranslated:
print_warning(f"{len(untranslated)} untranslated keys (non-critical)")
return 0
return 0
def show_diff(category: str) -> int:

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "المواضيع",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "يتطلب كيرو حساب أمازون."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "تخفيض التكلفة هو على رأس أولوياتك.",
"avoid": "بيانات التسعير مفقودة أو قديمة.",
"example": "وظائف الخلفية أو الدُفعات حيث تكون التكلفة الأقل مفضلة."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "جارٍ تحميل لوحة تحكم MCP...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "فشل في تبديل المزامنة التلقائية",
"allModelsAlreadyImported": "جميع النماذج مستوردة بالفعل",
"noNewModelsToImport": "لا توجد نماذج جديدة للاستيراد — جميع النماذج موجودة بالفعل في السجل أو قائمة النماذج المخصصة",
"skippingExistingModels": "تخطي {count} نماذج موجودة"
"skippingExistingModels": "تخطي {count} نماذج موجودة",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "الإعدادات",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "إذا اختلف مقدمو الخدمة من حيث الجودة/التكلفة، فابدأ بـ Cost Opt للعمل في الخلفية والأقل استخدامًا للارتداء المتوازن.",
"comboDefaultsGuideTitle": "كيفية ضبط إعدادات التحرير والسرد الافتراضية",
"comboDefaultsGuideHint1": "اجعل عمليات إعادة المحاولة منخفضة في التدفقات ذات زمن الوصول المنخفض؛ زيادة المهلة فقط لمهام الجيل الطويل.",
"comboDefaultsGuideHint2": "استخدم تجاوزات الموفر عندما يحتاج أحد الموفرين إلى سلوك مهلة/إعادة محاولة مختلف عن الإعدادات الافتراضية العامة."
"comboDefaultsGuideHint2": "استخدم تجاوزات الموفر عندما يحتاج أحد الموفرين إلى سلوك مهلة/إعادة محاولة مختلف عن الإعدادات الافتراضية العامة.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "مترجم",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Теми",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Киро изисква акаунт в Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Намаляването на разходите е вашият основен приоритет.",
"avoid": "Ценовите данни липсват или са остарели.",
"example": "Задачи на заден фон или партида, при които се предпочитат по - ниски разходи."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Зареждане на таблото за управление на MCP...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Неуспешно превключване на автоматичното синхронизиране",
"allModelsAlreadyImported": "Всички модели вече са импортирани",
"noNewModelsToImport": "Няма нови модели за импортиране — всички модели вече са в регистъра или списъка с персонализирани модели",
"skippingExistingModels": "Пропускане на {count} съществуващи модела"
"skippingExistingModels": "Пропускане на {count} съществуващи модела",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Настройки",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Ако доставчиците се различават по отношение на качество/цена, започнете с Cost Opt за фонова работа и Least Used за балансирано износване.",
"comboDefaultsGuideTitle": "Как да настроите настройките по подразбиране на комбинацията",
"comboDefaultsGuideHint1": "Поддържайте ниски повторни опити в потоци с ниска латентност; увеличете времето за изчакване само за задачи с дълго генериране.",
"comboDefaultsGuideHint2": "Използвайте замени на доставчика, когато един доставчик се нуждае от различно поведение при изчакване/повторен опит от глобалните настройки по подразбиране."
"comboDefaultsGuideHint2": "Използвайте замени на доставчика, когато един доставчик се нуждае от различно поведение при изчакване/повторен опит от глобалните настройки по подразбиране.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Преводач",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"themeCyan": "Azurová",
"cliToolsShort": "Nástroje",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Motivy",
@@ -717,6 +722,10 @@
},
"4": {
"title": "Vybrat model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -744,6 +753,30 @@
"notes": {
"0": "Kiro vyžaduje Amazon účet."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
}
},
@@ -851,6 +884,11 @@
"when": "Snížení nákladů je vaší nejvyšší prioritou.",
"avoid": "Údaje o cenách chybí nebo jsou zastaralé.",
"example": "Úlohy na pozadí nebo dávkové úlohy, kde se upřednostňují nižší náklady."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -944,6 +982,13 @@
"tip1": "Zajistěte cenové pokrytí pro všechny vybrané modely.",
"tip2": "Pro náročné výzvy si pořiďte kvalitní záložní řešení.",
"tip3": "Používejte pro dávkové/úlohy na pozadí, kde jsou hlavním klíčovým ukazatelem výkonnosti náklady."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Volný zásobník (0 $)",
@@ -1067,7 +1112,25 @@
"a2aQuickStartStep3": "Sledujte a ovládejte úkoly pomocí příkazů `tasks/get` a `tasks/cancel`.",
"completionsLegacy": "Completions (Zastaralé)",
"completionsLegacyDesc": "Zastaralé OpenAI text completion akceptuje oba formáty, prompt string i messages array.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"endpoints": {
"tabProxy": "Koncová Proxy",
@@ -1653,7 +1716,13 @@
"autoSyncToggleFailed": "Nepodařilo se přepnout automatickou synchronizaci",
"allModelsAlreadyImported": "Všechny modely jsou již importovány",
"noNewModelsToImport": "Žádné nové modely k importu — všechny modely jsou již v registru nebo v seznamu vlastních modelů",
"skippingExistingModels": "Přeskakování {count} existujících modelů"
"skippingExistingModels": "Přeskakování {count} existujících modelů",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Nastavení",
@@ -2062,7 +2131,25 @@
"customPricingNote": "Výchozí ceny pro konkrétní modely můžete přepsat. Vlastní přepsání má přednost před automaticky zjištěnými cenami.",
"editPricing": "Upravit ceny",
"viewFullDetails": "Zobrazit všechny podrobnosti",
"themeCoral": "Korál"
"themeCoral": "Korál",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Překladatel",
@@ -2193,7 +2280,7 @@
"sendMessageToSeePipeline": "Odešlete zprávu a zobrazte si proces překladu",
"chatMessageHintPrefix": "Vaše zpráva bude formátována jako",
"chatMessageHintSuffix": "požadavek, přeložený kanálem a odeslaný vybranému poskytovateli.",
"youWithFormat": "Vy ({formát})",
"youWithFormat": "Vy ({format})",
"assistant": "Asistent",
"typeMessage": "Napište zprávu...",
"send": "Poslat",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Temaer",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro kræver en Amazon-konto."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Omkostningsreduktion er din højeste prioritet.",
"avoid": "Prissætningsdata mangler eller er forældede.",
"example": "Baggrunds- eller batchjob, hvor lavere omkostninger foretrækkes."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Indlæser MCP-dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Automatisk synkronisering kunne ikke slås til eller fra",
"allModelsAlreadyImported": "Alle modeller er allerede importeret",
"noNewModelsToImport": "Ingen nye modeller at importere — alle modeller findes allerede i registreret eller brugerdefineret liste",
"skippingExistingModels": "Springer {count} eksisterende modeller over"
"skippingExistingModels": "Springer {count} eksisterende modeller over",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Indstillinger",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Hvis udbydere varierer i kvalitet/omkostninger, start med Cost Opt for baggrundsarbejde og Mindst brugt for balanceret slid.",
"comboDefaultsGuideTitle": "Sådan indstiller du combo-standarder",
"comboDefaultsGuideHint1": "Hold lave genforsøg i flows med lav latens; øg kun timeout for lange generationsopgaver.",
"comboDefaultsGuideHint2": "Brug udbydertilsidesættelser, når en udbyder har brug for en anden timeout-/genforsøgsadfærd end globale standardindstillinger."
"comboDefaultsGuideHint2": "Brug udbydertilsidesættelser, når en udbyder har brug for en anden timeout-/genforsøgsadfærd end globale standardindstillinger.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Oversætter",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themen",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro erfordert ein Amazon-Konto."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Kostenreduzierung steht für Sie an erster Stelle.",
"avoid": "Preisdaten fehlen oder sind veraltet.",
"example": "Hintergrund- oder Batch-Jobs, bei denen geringere Kosten bevorzugt werden."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Sichere Preisabdeckung für alle ausgewählten Modelle.",
"tip2": "Behalte einen Qualitäts-Fallback für schwierige Prompts.",
"tip3": "Ideal für Batch/Hintergrundjobs, bei denen Kosten das Haupt-KPI sind."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "MCP-Dashboard wird geladen...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Auto-Sync umschalten fehlgeschlagen",
"allModelsAlreadyImported": "Alle Modelle sind bereits importiert",
"noNewModelsToImport": "Keine neuen Modelle zum Importieren — alle Modelle sind bereits in der Registry oder der Liste benutzerdefinierter Modelle",
"skippingExistingModels": "Überspringe {count} vorhandene Modelle"
"skippingExistingModels": "Überspringe {count} vorhandene Modelle",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Einstellungen",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Wenn sich die Qualität/Kosten der Anbieter unterscheiden, beginnen Sie mit „Cost Opt“ für Hintergrundarbeit und „Least Used“ für ausgewogene Abnutzung.",
"comboDefaultsGuideTitle": "So optimieren Sie die Combo-Standardeinstellungen",
"comboDefaultsGuideHint1": "Halten Sie die Wiederholungsversuche bei Datenflüssen mit geringer Latenz gering. Erhöhen Sie das Timeout nur für Aufgaben mit langer Generierung.",
"comboDefaultsGuideHint2": "Verwenden Sie Anbieterüberschreibungen, wenn ein Anbieter ein anderes Timeout-/Wiederholungsverhalten als die globalen Standardwerte benötigt."
"comboDefaultsGuideHint2": "Verwenden Sie Anbieterüberschreibungen, wenn ein Anbieter ein anderes Timeout-/Wiederholungsverhalten als die globalen Standardwerte benötigt.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Übersetzer",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -722,6 +722,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -749,6 +753,30 @@
"notes": {
"0": "Kiro requires Amazon account."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
}
},
@@ -856,6 +884,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -949,6 +982,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -2974,4 +3014,4 @@
"expires": "Expires",
"actions": "Actions"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Temas",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro requiere cuenta de Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "La reducción de costos es su principal prioridad.",
"avoid": "Faltan datos de precios o están desactualizados.",
"example": "Trabajos en segundo plano o por lotes donde se prefiere un menor costo."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Asegura cobertura de precios para todos los modelos seleccionados.",
"tip2": "Mantén un fallback de calidad para prompts difíciles.",
"tip3": "Úsala en batch/tareas de fondo donde el costo sea el KPI principal."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Crea un Quick Tunnel temporal de Cloudflare. La URL cambia después de cada reinicio."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Cargando el panel de MCP...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Error al alternar sincronización automática",
"allModelsAlreadyImported": "Todos los modelos ya están importados",
"noNewModelsToImport": "No hay modelos nuevos para importar — todos los modelos ya están en el registro o en la lista de modelos personalizados",
"skippingExistingModels": "Omitiendo {count} modelos existentes"
"skippingExistingModels": "Omitiendo {count} modelos existentes",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Configuración",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Si los proveedores varían en calidad/costo, comience con Opción de costo para trabajo en segundo plano y Menos usado para desgaste equilibrado.",
"comboDefaultsGuideTitle": "Cómo ajustar los valores predeterminados del combo",
"comboDefaultsGuideHint1": "Mantenga bajos los reintentos en flujos de baja latencia; aumente el tiempo de espera solo para tareas de larga generación.",
"comboDefaultsGuideHint2": "Utilice anulaciones de proveedores cuando un proveedor necesite un comportamiento de tiempo de espera/reintento diferente al de los valores predeterminados globales."
"comboDefaultsGuideHint2": "Utilice anulaciones de proveedores cuando un proveedor necesite un comportamiento de tiempo de espera/reintento diferente al de los valores predeterminados globales.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Traductor",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Teemat",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro vaatii Amazon-tilin."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Kustannusten vähentäminen on tärkein prioriteettisi.",
"avoid": "Hinnoittelutiedot puuttuvat tai ovat vanhentuneet.",
"example": "Tausta- tai erätyöt, joissa edullisemmat kustannukset ovat paremmat."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Ladataan MCP-hallintapaneelia...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Automaattisen synkronoinnin vaihtaminen epäonnistui",
"allModelsAlreadyImported": "Kaikki mallit on jo tuotu",
"noNewModelsToImport": "Ei uusia malleja tuotavaksi — kaikki mallit ovat jo rekisterissä tai mukautetulla mallilistalla",
"skippingExistingModels": "Ohitetaan {count} olemassa olevaa mallia"
"skippingExistingModels": "Ohitetaan {count} olemassa olevaa mallia",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Asetukset",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Jos palveluntarjoajat vaihtelevat laadultaan/kustannuksiltaan, aloita Cost Opt -vaihtoehdolla taustatyössä ja Vähiten käytetyllä tasapainoiseen kulumiseen.",
"comboDefaultsGuideTitle": "Kuinka virittää yhdistelmäoletusasetukset",
"comboDefaultsGuideHint1": "Pidä uudelleenyritykset alhaisena matalan viiveen virroissa; lisää aikakatkaisua vain pitkiä sukupolvitehtäviä varten.",
"comboDefaultsGuideHint2": "Käytä palveluntarjoajan ohituksia, kun yksi palveluntarjoaja tarvitsee erilaista aikakatkaisu-/uudelleenyritystoimintaa kuin yleiset oletusasetukset."
"comboDefaultsGuideHint2": "Käytä palveluntarjoajan ohituksia, kun yksi palveluntarjoaja tarvitsee erilaista aikakatkaisu-/uudelleenyritystoimintaa kuin yleiset oletusasetukset.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Kääntäjä",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Thèmes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro nécessite un compte Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "La réduction des coûts est votre priorité absolue.",
"avoid": "Les données de tarification sont manquantes ou obsolètes.",
"example": "Travaux en arrière-plan ou par lots pour lesquels un coût inférieur est préféré."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Assure une couverture de prix pour tous les modèles sélectionnés.",
"tip2": "Garde un fallback de qualité pour les prompts difficiles.",
"tip3": "Idéal pour batch/tâches de fond où le coût est le KPI principal."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Chargement du tableau de bord MCP...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Échec de l'activation de la synchronisation automatique",
"allModelsAlreadyImported": "Tous les modèles sont déjà importés",
"noNewModelsToImport": "Aucun nouveau modèle à importer — tous les modèles sont déjà dans le registre ou la liste de modèles personnalisés",
"skippingExistingModels": "Ignorance de {count} modèles existants"
"skippingExistingModels": "Ignorance de {count} modèles existants",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Paramètres",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Si les prestataires varient en termes de qualité/coût, commencez par Opter pour le coût pour le travail de fond et par Moins utilisé pour une usure équilibrée.",
"comboDefaultsGuideTitle": "Comment régler les paramètres par défaut du combo",
"comboDefaultsGuideHint1": "Maintenez un faible nombre de tentatives dans les flux à faible latence ; augmentez le délai d'attente uniquement pour les tâches de génération longue.",
"comboDefaultsGuideHint2": "Utilisez les remplacements de fournisseur lorsqu'un fournisseur a besoin d'un comportement de délai d'attente/nouvelle tentative différent de celui des valeurs par défaut globales."
"comboDefaultsGuideHint2": "Utilisez les remplacements de fournisseur lorsqu'un fournisseur a besoin d'un comportement de délai d'attente/nouvelle tentative différent de celui des valeurs par défaut globales.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Traducteur",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro דורש חשבון אמזון."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "החלפת הסנכרון האוטומטי נכשלה",
"allModelsAlreadyImported": "כל הדגמים כבר מיובאים",
"noNewModelsToImport": "אין דגמים חדשים לייבוא — כל הדגמים כבר קיימים ברישום או ברשימת הדגמים המותאמים",
"skippingExistingModels": "מדלג על {count} דגמים קיימים"
"skippingExistingModels": "מדלג על {count} דגמים קיימים",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "הגדרות",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "אם הספקים משתנים באיכות/עלות, התחל עם Cost Opt עבור עבודת רקע והפחות בשימוש עבור בלאי מאוזן.",
"comboDefaultsGuideTitle": "כיצד לכוונן ברירות מחדל משולבות",
"comboDefaultsGuideHint1": "שמור על ניסיונות חוזרים נמוכים בזרימות עם אחזור נמוך; להגדיל את הזמן הקצוב רק עבור משימות דור ארוך.",
"comboDefaultsGuideHint2": "השתמש בעקיפות ספק כאשר ספק אחד זקוק להתנהגות שונה של זמן קצוב/ניסיון חוזר מאשר ברירות מחדל גלובליות."
"comboDefaultsGuideHint2": "השתמש בעקיפות ספק כאשר ספק אחד זקוק להתנהגות שונה של זמן קצוב/ניסיון חוזר מאשר ברירות מחדל גלובליות.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "מתרגם",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -58,7 +58,85 @@
"free": "निःशुल्क",
"skipToContent": "सामग्री पर जाएं",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting...",
"Failed to reset pricing": "Failed to reset pricing",
"hex": "Hex",
"tool": "Tool",
"musicGeneration": "Music Generation",
"Failed to save pricing": "Failed to save pricing",
"error_description": "Error Description",
"windowMs": "Window (ms)",
"content-type": "Content Type",
"http": "HTTP",
"text": "Text",
"sortOrder": "Sort Order",
"musicDesc": "Music Description",
"oauth": "OAuth",
"file": "File",
"textarea": "Textarea",
"host": "Host",
"chat-completions": "Chat Completions",
"better-sqlite3": "better-sqlite3",
"connectionId": "Connection ID",
"open": "Open",
"skill": "Skill",
"content-length": "Content Length",
"scope_id": "Scope ID",
"accept": "Accept",
"apiKeyName": "API Key Name",
"resolveConnectionId": "Resolve Connection ID",
"scope": "Scope",
"selfsigned": "Self-signed",
"builder-id": "Builder ID",
"toolId": "Tool ID",
"apiKeyId": "API Key ID",
"promptTokens": "Prompt Tokens",
"cloud-status-changed": "Cloud status changed",
"sortBy": "Sort By",
"code": "Code",
"redirect_uri": "Redirect URI",
"alias": "Alias",
"id": "ID",
"social-github": "GitHub",
"jwtSecret": "JWT Secret",
"TOOL_DENYLIST": "Tool Denylist",
"scopeId": "Scope ID",
"totalTokens": "Total Tokens",
"proxy_id": "Proxy ID",
"idempotency-key": "Idempotency Key",
"TOOL_ALLOWLIST": "Tool Allowlist",
"apiKeySecret": "API Key Secret",
"social-google": "Google",
"tab": "Tab",
"keytar": "Keytar",
"where_used": "Where Used",
"resolve_connection_id": "Resolve Connection ID",
"offset": "Offset",
"crypto": "Crypto",
"compatible": "Compatible",
"base64url": "Base64 URL",
"undici": "undici",
"import": "Import",
"blacklist": "Blacklist",
"apikey": "API Key",
"resolve": "Resolve",
"whitelist": "Whitelist",
"whereUsed": "Where Used",
"accountId": "Account ID",
"component": "Component",
"authorization": "Authorization",
"force": "Force",
"idc": "IDC",
"rawModel": "Raw Model",
"origin": "Origin",
"web": "Web",
"cookie": "Cookie",
"completionTokens": "Completion Tokens",
"range": "Range",
"proxyId": "Proxy ID",
"auth_token": "Auth Token",
"limit": "Limit",
"hours": "Hours"
},
"sidebar": {
"home": "घर",
@@ -109,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -181,7 +264,11 @@
"requestsShort": "{count} अनुरोध",
"providerModelsTitle": "{provider} - मॉडल",
"copiedModel": "कॉपी किया गया: {model}",
"aliasLabel": "उपनाम"
"aliasLabel": "उपनाम",
"updateStarted": "Update started...",
"updateNow": "Update Now",
"updateAvailableDesc": "A new version is available. Click to update.",
"updating": "Updating..."
},
"analytics": {
"title": "विश्लेषिकी",
@@ -543,6 +630,9 @@
"title": "मॉडल कॉन्फ़िगरेशन जोड़ें",
"desc": "अपने मॉडल सरणी में निम्नलिखित कॉन्फ़िगरेशन जोड़ें:"
}
},
"notes": {
"0": "Continue uses JSON config file."
}
},
"opencode": {
@@ -560,7 +650,15 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
"0": "OpenCode uses TOML config.",
"1": "Setup your API key via environment variable."
}
},
"kiro": {
@@ -579,6 +677,33 @@
"4": {
"title": "Select Model"
}
},
"notes": {
"0": "Kiro CLI uses YAML config."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
@@ -708,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -801,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -924,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1489,7 +1644,22 @@
"compatUpstreamRemoveRow": "Remove row",
"allModelsAlreadyImported": "सभी मॉडल पहले से ही आयातित हैं",
"noNewModelsToImport": "आयात करने के लिए कोई नए मॉडल नहीं — सभी मॉडल पहले से ही रजिस्ट्री या कस्टम मॉडल सूची में हैं",
"skippingExistingModels": "{count} मौजूदा मॉडल छोड़े जा रहे हैं"
"skippingExistingModels": "{count} मौजूदा मॉडल छोड़े जा रहे हैं",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth",
"autoSync": "Auto-Sync",
"clearAllModels": "Clear All Models",
"autoSyncTooltip": "Automatically refresh model list every 24h (configurable via MODEL_SYNC_INTERVAL_HOURS)",
"autoSyncEnabled": "Auto-sync enabled — models will refresh periodically",
"clearAllModelsConfirm": "Are you sure you want to remove all models for this provider? This cannot be undone.",
"clearAllModelsSuccess": "All models cleared",
"clearAllModelsFailed": "Failed to clear models",
"autoSyncToggleFailed": "Failed to toggle auto-sync",
"autoSyncDisabled": "Auto-sync disabled"
},
"settings": {
"title": "सेटिंग्स",
@@ -1898,7 +2068,25 @@
"routingAdvancedGuideHint2": "यदि प्रदाता गुणवत्ता/लागत में भिन्न हैं, तो पृष्ठभूमि कार्य के लिए कॉस्ट ऑप्ट और संतुलित पहनावे के लिए कम से कम उपयोग से शुरुआत करें।",
"comboDefaultsGuideTitle": "कॉम्बो डिफॉल्ट्स को कैसे ट्यून करें",
"comboDefaultsGuideHint1": "कम-विलंबता प्रवाह में पुनः प्रयास कम रखें; केवल लंबी पीढ़ी के कार्यों के लिए टाइमआउट बढ़ाएँ।",
"comboDefaultsGuideHint2": "जब एक प्रदाता को वैश्विक डिफ़ॉल्ट की तुलना में अलग टाइमआउट/पुनः प्रयास व्यवहार की आवश्यकता होती है तो प्रदाता ओवरराइड का उपयोग करें।"
"comboDefaultsGuideHint2": "जब एक प्रदाता को वैश्विक डिफ़ॉल्ट की तुलना में अलग टाइमआउट/पुनः प्रयास व्यवहार की आवश्यकता होती है तो प्रदाता ओवरराइड का उपयोग करें।",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "अनुवादक",
@@ -2316,7 +2504,16 @@
"restartServerWithNewPassword": "सर्वर को पुनरारंभ करें - यह नए पासवर्ड का उपयोग करेगा",
"backToLogin": "लॉगइन पर वापस जाएँ",
"forgotPassword": "पासवर्ड भूल गए?",
"defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)"
"defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)",
"Content-Disposition": "Content-Disposition",
"waitingForAuthorization": "Waiting for authorization...",
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
"Authorization": "Authorization",
"exchangingCodeForTokens": "Exchanging code for tokens...",
"waitingForQoderAuthorization": "Waiting for Qoder authorization..."
},
"landing": {
"brandName": "ओम्निरूट",
@@ -2523,7 +2720,9 @@
"mgmtProxiesBulkAssignNote": "Assign or clear one proxy across many scope IDs in one request.",
"mgmtAssignmentsListNote": "List proxy assignments by scope, scope_id, or proxy_id.",
"mgmtAssignmentsUpdateNote": "Assign or clear proxy for global/provider/account/combo scope.",
"mgmtLegacyMigrationNote": "Import legacy proxyConfig maps into registry assignments."
"mgmtLegacyMigrationNote": "Import legacy proxyConfig maps into registry assignments.",
"endpointSpeechNote": "Text-to-speech generation (ElevenLabs, OpenAI TTS).",
"endpointEmbeddingsNote": "Text embedding generation (OpenAI, Cohere, Voyage)."
},
"legal": {
"privacyPolicy": "गोपनीयता नीति",
@@ -2732,6 +2931,86 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
},
"templatePayloads": {
"toolCalling": {
"toolDescription": "Get current weather for a location",
"userWeather": "What's the weather in Tokyo?",
"cityNameDescription": "The name of the city to get weather for"
},
"multiTurn": {
"assistantExample": "I'd be happy to help you with that.",
"userFollowUp": "Can you elaborate on that?",
"userInitial": "I need help with",
"system": "You are a helpful assistant."
},
"systemPrompt": {
"question": "What is the meaning of life?",
"systemInstruction": "Provide a thoughtful, philosophical answer."
},
"simpleChat": {
"userGreeting": "Hello! How can I help you today?",
"system": "You are a helpful AI assistant."
},
"thinking": {
"question": "Explain quantum computing"
},
"streaming": {
"prompt": "Write a story about"
}
},
"templateNames": {
"tool-calling": "Tool Calling",
"thinking": "Thinking",
"simple-chat": "Simple Chat",
"system-prompt": "System Prompt",
"streaming": "Streaming",
"multi-turn": "Multi-turn"
},
"templateDescriptions": {
"simple-chat": "Basic chat template with system message",
"multi-turn": "Template for multi-turn conversations",
"thinking": "Template with reasoning/thinking budget",
"tool-calling": "Template for tool/function calling",
"system-prompt": "Template with custom system prompt",
"streaming": "Template for streaming responses"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Témák",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "A Kiro Amazon-fiókot igényel."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "A költségcsökkentés az Ön legfőbb prioritása.",
"avoid": "Az árképzési adatok hiányoznak vagy elavultak.",
"example": "Háttérben végzett vagy kötegelt munkák, ahol az alacsonyabb költséget részesítik előnyben."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Failed to toggle auto-sync",
"allModelsAlreadyImported": "Minden modell már importálva van",
"noNewModelsToImport": "Nincs új modell az importáláshoz — minden modell már a nyilvántartásban vagy az egyéni modellek listájában van",
"skippingExistingModels": "{count} meglévő modell kihagyása"
"skippingExistingModels": "{count} meglévő modell kihagyása",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Beállítások elemre",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Ha a szolgáltatók minősége/költségei eltérőek, kezdje a Cost Opt opcióval a háttérmunkához és a Least Used beállítással a kiegyensúlyozott viselet érdekében.",
"comboDefaultsGuideTitle": "A kombinált alapértelmezett beállítások hangolása",
"comboDefaultsGuideHint1": "Tartsa alacsonyan az újrapróbálkozásokat az alacsony késleltetésű folyamatokban; csak hosszú generációs feladatok esetén növelje az időtúllépést.",
"comboDefaultsGuideHint2": "Használja a szolgáltató felülbírálását, ha az egyik szolgáltatónak a globális alapértelmezetttől eltérő időtúllépési/újrapróbálkozási viselkedésre van szüksége."
"comboDefaultsGuideHint2": "Használja a szolgáltató felülbírálását, ha az egyik szolgáltatónak a globális alapértelmezetttől eltérő időtúllépési/újrapróbálkozási viselkedésre van szüksége.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Fordító",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro memerlukan akun Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Gagal mengaktifkan sinkronisasi otomatis",
"allModelsAlreadyImported": "Semua model sudah diimpor",
"noNewModelsToImport": "Tidak ada model baru untuk diimpor — semua model sudah ada di registri atau daftar model kustom",
"skippingExistingModels": "Melewatkan {count} model yang sudah ada"
"skippingExistingModels": "Melewatkan {count} model yang sudah ada",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Pengaturan",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Jika penyedia memiliki kualitas/biaya yang berbeda-beda, mulailah dengan Cost Opt (Pilihan Biaya) untuk pekerjaan latar belakang dan Paling Sedikit Digunakan untuk pemakaian yang seimbang.",
"comboDefaultsGuideTitle": "Cara menyetel default kombo",
"comboDefaultsGuideHint1": "Jaga agar percobaan ulang tetap rendah dalam aliran latensi rendah; menambah waktu tunggu hanya untuk tugas-tugas generasi panjang.",
"comboDefaultsGuideHint2": "Gunakan penggantian penyedia ketika satu penyedia memerlukan perilaku batas waktu/coba lagi yang berbeda dari default global."
"comboDefaultsGuideHint2": "Gunakan penggantian penyedia ketika satu penyedia memerlukan perilaku batas waktu/coba lagi yang berbeda dari default global.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Penerjemah",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"themeCyan": "सियान",
"cliToolsShort": "उपकरण",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "थीम्स",
@@ -717,6 +722,10 @@
},
"4": {
"title": "मॉडल का चयन करें"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -744,6 +753,30 @@
"notes": {
"0": "किरो को अमेज़न खाते की आवश्यकता है।"
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
}
},
@@ -851,6 +884,11 @@
"when": "लागत में कमी आपकी सर्वोच्च प्राथमिकता है.",
"avoid": "मूल्य निर्धारण डेटा गायब है या पुराना है।",
"example": "पृष्ठभूमि या बैच की नौकरियाँ जहाँ कम लागत को प्राथमिकता दी जाती है।"
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -944,6 +982,13 @@
"tip1": "सभी चयनित मॉडलों के लिए मूल्य निर्धारण कवरेज सुनिश्चित करें।",
"tip2": "कठिन संकेतों के लिए गुणवत्तापूर्ण फ़ॉलबैक रखें।",
"tip3": "बैच/पृष्ठभूमि नौकरियों के लिए उपयोग करें जहां लागत मुख्य KPI है।"
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "मुफ़्त स्टैक ($0)",
@@ -1067,7 +1112,25 @@
"a2aQuickStartStep3": "`कार्य/प्राप्त करें` और `कार्य/रद्द करें` का उपयोग करके कार्यों को ट्रैक और नियंत्रित करें।",
"completionsLegacy": "पूर्णताएँ (विरासत)",
"completionsLegacyDesc": "लीगेसी ओपनएआई टेक्स्ट पूर्णताएँ - शीघ्र स्ट्रिंग और संदेश सरणी प्रारूप दोनों को स्वीकार करती हैं",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"endpoints": {
"tabProxy": "समापन बिंदु प्रॉक्सी",
@@ -1653,7 +1716,13 @@
"modelsPathHint": "सत्यापन के लिए कस्टम मॉडल पथ (जैसे /v4/मॉडल)",
"allModelsAlreadyImported": "Semua model sudah diimpor",
"noNewModelsToImport": "Tidak ada model baru untuk diimpor — semua model sudah ada di registri atau daftar model kustom",
"skippingExistingModels": "Melewatkan {count} model yang sudah ada"
"skippingExistingModels": "Melewatkan {count} model yang sudah ada",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "सेटिंग्स",
@@ -2062,7 +2131,25 @@
"customPricingNote": "आप विशिष्ट मॉडलों के लिए डिफ़ॉल्ट मूल्य निर्धारण को ओवरराइड कर सकते हैं। कस्टम ओवरराइड्स को स्वतः-पता लगाए गए मूल्य-निर्धारण पर प्राथमिकता दी जाती है।",
"editPricing": "मूल्य निर्धारण संपादित करें",
"viewFullDetails": "पूर्ण विवरण देखें",
"themeCoral": "मूंगा"
"themeCoral": "मूंगा",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "अनुवादक",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro richiede un account Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Impossibile attivare la sincronizzazione automatica",
"allModelsAlreadyImported": "Tutti i modelli sono già importati",
"noNewModelsToImport": "Nessun nuovo modello da importare — tutti i modelli sono già nel registro o nell'elenco dei modelli personalizzati",
"skippingExistingModels": "Salto {count} modelli esistenti"
"skippingExistingModels": "Salto {count} modelli esistenti",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Impostazioni",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Se i fornitori variano in termini di qualità/costo, iniziare con Opzione costo per il lavoro in background e Meno utilizzato per un consumo equilibrato.",
"comboDefaultsGuideTitle": "Come ottimizzare le impostazioni predefinite della combo",
"comboDefaultsGuideHint1": "Mantenere bassi i tentativi nei flussi a bassa latenza; aumentare il timeout solo per attività di generazione prolungata.",
"comboDefaultsGuideHint2": "Utilizzare le sostituzioni del provider quando un provider necessita di un comportamento di timeout/riprova diverso rispetto alle impostazioni predefinite globali."
"comboDefaultsGuideHint2": "Utilizzare le sostituzioni del provider quando un provider necessita di un comportamento di timeout/riprova diverso rispetto alle impostazioni predefinite globali.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Traduttore",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "KiroはAmazonアカウントが必要です。"
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "自動同期の切り替えに失敗",
"allModelsAlreadyImported": "すべてのモデルは既にインポート済みです",
"noNewModelsToImport": "インポートする新しいモデルはありません — すべてのモデルは既にレジストリまたはカスタムモデルリストにあります",
"skippingExistingModels": "{count}件の既存モデルをスキップ"
"skippingExistingModels": "{count}件の既存モデルをスキップ",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "設定",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "プロバイダーによって品質/コストが異なる場合は、バックグラウンド作業についてはコスト最適化から開始し、バランスのとれた摩耗については最も使用されないようにします。",
"comboDefaultsGuideTitle": "コンボのデフォルトを調整する方法",
"comboDefaultsGuideHint1": "低遅延フローでは再試行を低く抑えます。長い世代のタスクの場合にのみタイムアウトを増やします。",
"comboDefaultsGuideHint2": "1 つのプロバイダーがグローバルなデフォルトとは異なるタイムアウト/再試行動作を必要とする場合は、プロバイダー オーバーライドを使用します。"
"comboDefaultsGuideHint2": "1 つのプロバイダーがグローバルなデフォルトとは異なるタイムアウト/再試行動作を必要とする場合は、プロバイダー オーバーライドを使用します。",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "翻訳者",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro는 Amazon 계정이 필요합니다."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "자동 동기화 전환 실패",
"allModelsAlreadyImported": "모든 모델이 이미 가져왔습니다",
"noNewModelsToImport": "가져올 새 모델 없음 — 모든 모델이 이미 레지스트리 또는 사용자 정의 모델 목록에 있습니다",
"skippingExistingModels": "{count}개의 기존 모델 건너뛰기"
"skippingExistingModels": "{count}개의 기존 모델 건너뛰기",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "설정",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "서비스 제공업체의 품질/비용이 다양한 경우 백그라운드 작업에는 비용 선택(Cost Opt)으로 시작하고 균형 잡힌 착용에는 최소 사용(Least Used)으로 시작하세요.",
"comboDefaultsGuideTitle": "콤보 기본값을 조정하는 방법",
"comboDefaultsGuideHint1": "지연 시간이 짧은 흐름에서는 재시도 횟수를 낮게 유지하세요. 긴 세대 작업에 대해서만 시간 제한을 늘립니다.",
"comboDefaultsGuideHint2": "하나의 공급자가 전역 기본값과 다른 시간 초과/재시도 동작을 필요로 하는 경우 공급자 재정의를 사용합니다."
"comboDefaultsGuideHint2": "하나의 공급자가 전역 기본값과 다른 시간 초과/재시도 동작을 필요로 하는 경우 공급자 재정의를 사용합니다.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "번역기",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro memerlukan akaun Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Gagal untuk menogol autosegerak",
"allModelsAlreadyImported": "Semua model sudah diimport",
"noNewModelsToImport": "Tiada model baru untuk diimport — semua model sudah ada dalam registri atau senarai model tersuai",
"skippingExistingModels": "Melangkau {count} model sedia ada"
"skippingExistingModels": "Melangkau {count} model sedia ada",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "tetapan",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Jika pembekal berbeza dalam kualiti/kos, mulakan dengan Pilihan Kos untuk kerja latar belakang dan Paling Kurang Digunakan untuk pemakaian seimbang.",
"comboDefaultsGuideTitle": "Bagaimana untuk menala lalai kombo",
"comboDefaultsGuideHint1": "Pastikan percubaan semula rendah dalam aliran kependaman rendah; tambahkan tamat masa hanya untuk tugas generasi panjang.",
"comboDefaultsGuideHint2": "Gunakan penggantian pembekal apabila satu pembekal memerlukan gelagat tamat masa/cuba semula yang berbeza daripada lalai global."
"comboDefaultsGuideHint2": "Gunakan penggantian pembekal apabila satu pembekal memerlukan gelagat tamat masa/cuba semula yang berbeza daripada lalai global.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Penterjemah",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Voor Kiro is een Amazon-account vereist."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Kan automatische synchronisatie niet in- of uitschakelen",
"allModelsAlreadyImported": "Alle modellen zijn al geïmporteerd",
"noNewModelsToImport": "Geen nieuwe modellen om te importeren — alle modellen staan al in het register of de lijst met aangepaste modellen",
"skippingExistingModels": "{count} bestaande modellen overgeslagen"
"skippingExistingModels": "{count} bestaande modellen overgeslagen",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Instellingen",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Als aanbieders variëren in kwaliteit/kosten, begin dan met Kosten Opt voor achtergrondwerk en Minst Gebruikt voor evenwichtige slijtage.",
"comboDefaultsGuideTitle": "Combo-standaardinstellingen afstemmen",
"comboDefaultsGuideHint1": "Houd het aantal nieuwe pogingen laag bij stromen met lage latentie; verhoog de time-out alleen voor lange generatietaken.",
"comboDefaultsGuideHint2": "Gebruik provideroverschrijvingen wanneer een provider ander time-out/opnieuw gedrag nodig heeft dan de algemene standaardwaarden."
"comboDefaultsGuideHint2": "Gebruik provideroverschrijvingen wanneer een provider ander time-out/opnieuw gedrag nodig heeft dan de algemene standaardwaarden.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Vertaler",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro krever Amazon-konto."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Laster inn MCP-dashbordet ...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Kunne ikke slå på automatisk synkronisering",
"allModelsAlreadyImported": "Alle modeller er allerede importert",
"noNewModelsToImport": "Ingen nye modeller å importere — alle modeller finnes allerede i registeret eller listen over egendefinerte modeller",
"skippingExistingModels": "Hopper over {count} eksisterende modeller"
"skippingExistingModels": "Hopper over {count} eksisterende modeller",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Innstillinger",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Hvis leverandørene varierer i kvalitet/kostnad, start med Cost Opt for bakgrunnsarbeid og Minst brukt for balansert slitasje.",
"comboDefaultsGuideTitle": "Hvordan justere kombinasjonsstandarder",
"comboDefaultsGuideHint1": "Hold lave gjenforsøk i flyter med lav latens; øke tidsavbruddet bare for langgenerasjonsoppgaver.",
"comboDefaultsGuideHint2": "Bruk leverandøroverstyringer når en leverandør trenger annen tidsavbrudd/forsøk på nytt enn globale standardinnstillinger."
"comboDefaultsGuideHint2": "Bruk leverandøroverstyringer når en leverandør trenger annen tidsavbrudd/forsøk på nytt enn globale standardinnstillinger.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Oversetter",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Ang Kiro ay nangangailangan ng Amazon account."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Nilo-load ang MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Nabigong i-toggle ang auto-sync",
"allModelsAlreadyImported": "Lahat ng mga modelo ay nai-import na",
"noNewModelsToImport": "Walang bagong modelo na i-import — lahat ng mga modelo ay nasa registry o custom na listahan na",
"skippingExistingModels": "Pinapalampas ang {count} na umiiral na mga modelo"
"skippingExistingModels": "Pinapalampas ang {count} na umiiral na mga modelo",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Mga setting",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Kung iba-iba ang kalidad/gastos ng mga provider, magsimula sa Cost Opt para sa background na trabaho at Least Used para sa balanseng pagsusuot.",
"comboDefaultsGuideTitle": "Paano i-tune ang mga default ng combo",
"comboDefaultsGuideHint1": "Panatilihing mababa ang mga muling pagsubok sa mga daloy na mababa ang latency; taasan ang timeout para lang sa mga gawaing pang-generation.",
"comboDefaultsGuideHint2": "Gumamit ng mga override ng provider kapag ang isang provider ay nangangailangan ng iba't ibang gawi sa pag-timeout/subukang muli kaysa sa mga pandaigdigang default."
"comboDefaultsGuideHint2": "Gumamit ng mga override ng provider kapag ang isang provider ay nangangailangan ng iba't ibang gawi sa pag-timeout/subukang muli kaysa sa mga pandaigdigang default.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Tagasalin",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro wymaga konta Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Nie udało się przełączyć automatycznej synchronizacji",
"allModelsAlreadyImported": "Wszystkie modele są już zaimportowane",
"noNewModelsToImport": "Brak nowych modeli do zaimportowania — wszystkie modele są już w rejestrze lub na liście modeli niestandardowych",
"skippingExistingModels": "Pomijanie {count} istniejących modeli"
"skippingExistingModels": "Pomijanie {count} istniejących modeli",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Ustawienia",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Jeśli dostawcy różnią się jakością/kosztami, zacznij od opcji Koszt w przypadku pracy w tle i opcji Najmniej używane w celu zapewnienia zrównoważonego zużycia.",
"comboDefaultsGuideTitle": "Jak dostroić domyślne ustawienia kombinacji",
"comboDefaultsGuideHint1": "Utrzymuj niską liczbę ponownych prób w przepływach o małych opóźnieniach; zwiększaj limit czasu tylko dla zadań o długim generowaniu.",
"comboDefaultsGuideHint2": "Użyj zastąpienia dostawcy, gdy jeden z dostawców wymaga innego zachowania związanego z przekroczeniem limitu czasu/ponownej próby niż globalne ustawienia domyślne."
"comboDefaultsGuideHint2": "Użyj zastąpienia dostawcy, gdy jeden z dostawców wymaga innego zachowania związanego z przekroczeniem limitu czasu/ponownej próby niż globalne ustawienia domyślne.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Tłumacz",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"cliToolsShort": "Ferramentas",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro requer uma conta Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -1028,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Cria um Quick Tunnel temporário do Cloudflare. A URL muda a cada reinício."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Carregando painel MCP...",
@@ -2017,7 +2068,25 @@
"routingAdvancedGuideHint2": "Se os fornecedores variarem em qualidade/custo, comece com Opção de custo para trabalho em segundo plano e Menos usado para desgaste equilibrado.",
"comboDefaultsGuideTitle": "Como ajustar os padrões de combinação",
"comboDefaultsGuideHint1": "Mantenha as tentativas baixas em fluxos de baixa latência; aumente o tempo limite apenas para tarefas de geração longa.",
"comboDefaultsGuideHint2": "Use substituições de provedor quando um provedor precisar de um comportamento de tempo limite/nova tentativa diferente dos padrões globais."
"comboDefaultsGuideHint2": "Use substituições de provedor quando um provedor precisar de um comportamento de tempo limite/nova tentativa diferente dos padrões globais.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Tradutor",
@@ -2904,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro requer conta Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"endpoints": {
"tabProxy": "Endpoint Proxy",
@@ -1602,7 +1665,13 @@
"autoSyncToggleFailed": "Falha ao alternar sincronização automática",
"allModelsAlreadyImported": "Todos os modelos já foram importados",
"noNewModelsToImport": "Nenhum modelo novo para importar — todos os modelos já estão no registo ou na lista de modelos personalizados",
"skippingExistingModels": "A ignorar {count} modelos existentes"
"skippingExistingModels": "A ignorar {count} modelos existentes",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Configurações",
@@ -2011,7 +2080,25 @@
"routingAdvancedGuideHint2": "Se os fornecedores variarem em qualidade/custo, comece com Opção de custo para trabalho em segundo plano e Menos usado para desgaste equilibrado.",
"comboDefaultsGuideTitle": "Como ajustar os padrões de combinação",
"comboDefaultsGuideHint1": "Mantenha as tentativas baixas em fluxos de baixa latência; aumente o tempo limite apenas para tarefas de geração longa.",
"comboDefaultsGuideHint2": "Use substituições de provedor quando um provedor precisar de um comportamento de tempo limite/nova tentativa diferente dos padrões globais."
"comboDefaultsGuideHint2": "Use substituições de provedor quando um provedor precisar de um comportamento de tempo limite/nova tentativa diferente dos padrões globais.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Tradutor",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro necesită un cont Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Nu s-a putut comuta sincronizarea automată",
"allModelsAlreadyImported": "Toate modelele sunt deja importate",
"noNewModelsToImport": "Niciun model nou de importat — toate modelele sunt deja în registru sau în lista de modele personalizate",
"skippingExistingModels": "Se omit {count} modele existente"
"skippingExistingModels": "Se omit {count} modele existente",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Setări",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Dacă furnizorii variază în ceea ce privește calitatea/costul, începeți cu Cost Opt pentru munca de fundal și Least Used pentru uzura echilibrată.",
"comboDefaultsGuideTitle": "Cum să reglați setările implicite de combo",
"comboDefaultsGuideHint1": "Menține reîncercările scăzute în fluxurile cu latență scăzută; crește timpul de expirare numai pentru sarcini de generație lungă.",
"comboDefaultsGuideHint2": "Folosiți suprascrierile furnizorului atunci când un furnizor are nevoie de un comportament de timeout/reîncercare diferit față de valorile prestabilite globale."
"comboDefaultsGuideHint2": "Folosiți suprascrierile furnizorului atunci când un furnizor are nevoie de un comportament de timeout/reîncercare diferit față de valorile prestabilite globale.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Traducător",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Темы",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro требует аккаунт Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Не удалось переключить автосинхронизацию",
"allModelsAlreadyImported": "Все модели уже импортированы",
"noNewModelsToImport": "Нет новых моделей для импорта — все модели уже есть в реестре или списке пользовательских моделей",
"skippingExistingModels": "Пропуск {count} существующих моделей"
"skippingExistingModels": "Пропуск {count} существующих моделей",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Настройки",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Если поставщики различаются по качеству/стоимости, начните с варианта «Стоимость» для фоновой работы и «Наименее используемый» для сбалансированного износа.",
"comboDefaultsGuideTitle": "Как настроить комбо по умолчанию",
"comboDefaultsGuideHint1": "Сохраняйте низкий уровень повторных попыток в потоках с малой задержкой; увеличивайте таймаут только для задач длинной генерации.",
"comboDefaultsGuideHint2": "Используйте переопределения поставщика, если одному поставщику требуется другое поведение по тайм-ауту/повторной попытке, чем глобальные значения по умолчанию."
"comboDefaultsGuideHint2": "Используйте переопределения поставщика, если одному поставщику требуется другое поведение по тайм-ауту/повторной попытке, чем глобальные значения по умолчанию.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Переводчик",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro vyžaduje účet Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Nepodarilo sa prepnúť automatickú synchronizáciu",
"allModelsAlreadyImported": "Všetky modely sú už importované",
"noNewModelsToImport": "Žiadne nové modely na import — všetky modely sú už v registri alebo v zozname vlastných modelov",
"skippingExistingModels": "Preskakujem {count} existujúcich modelov"
"skippingExistingModels": "Preskakujem {count} existujúcich modelov",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Nastavenia",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Ak sa poskytovatelia líšia v kvalite/nákladoch, začnite s Cost Opt pre prácu na pozadí a Najmenej používané pre vyvážené opotrebovanie.",
"comboDefaultsGuideTitle": "Ako vyladiť predvolené nastavenia komba",
"comboDefaultsGuideHint1": "Udržujte počet opakovaní na nízkej úrovni v tokoch s nízkou latenciou; zvýšiť časový limit iba pre úlohy s dlhým generovaním.",
"comboDefaultsGuideHint2": "Použite prepísania poskytovateľa, keď jeden poskytovateľ potrebuje iné správanie pri uplynutí časového limitu/opakovania, ako sú globálne predvolené hodnoty."
"comboDefaultsGuideHint2": "Použite prepísania poskytovateľa, keď jeden poskytovateľ potrebuje iné správanie pri uplynutí časového limitu/opakovania, ako sú globálne predvolené hodnoty.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Prekladateľ",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro kräver Amazon-konto."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Det gick inte att växla automatisk synkronisering",
"allModelsAlreadyImported": "Alla modeller är redan importerade",
"noNewModelsToImport": "Inga nya modeller att importera — alla modeller finns redan i registret eller listan över anpassade modeller",
"skippingExistingModels": "Hoppar över {count} befintliga modeller"
"skippingExistingModels": "Hoppar över {count} befintliga modeller",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Inställningar",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Om leverantörer varierar i kvalitet/kostnad, börja med Cost Opt för bakgrundsarbete och Minst Används för balanserat slitage.",
"comboDefaultsGuideTitle": "Hur man ställer in kombinationsinställningar",
"comboDefaultsGuideHint1": "Håll låga omförsök i flöden med låg latens; öka timeout endast för långa generationsuppgifter.",
"comboDefaultsGuideHint2": "Använd åsidosättande av leverantörer när en leverantör behöver ett annat beteende för timeout/försök igen än globala standardinställningar."
"comboDefaultsGuideHint2": "Använd åsidosättande av leverantörer när en leverantör behöver ett annat beteende för timeout/försök igen än globala standardinställningar.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Översättare",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "ธีมส์",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro ต้องการบัญชี Amazon"
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "ไม่สามารถสลับการซิงค์อัตโนมัติ",
"allModelsAlreadyImported": "นำเข้าโมเดลทั้งหมดแล้ว",
"noNewModelsToImport": "ไม่มีโมเดลใหม่ที่จะนำเข้า — โมเดลทั้งหมดมีอยู่แล้วในรีจิสทรีหรือรายการโมเดลที่กำหนดเอง",
"skippingExistingModels": "ข้าม {count} โมเดลที่มีอยู่"
"skippingExistingModels": "ข้าม {count} โมเดลที่มีอยู่",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "การตั้งค่า",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "หากผู้ให้บริการมีคุณภาพ/ต้นทุนแตกต่างกัน ให้เริ่มด้วยการเลือกต้นทุนสำหรับงานเบื้องหลังและใช้งานน้อยที่สุดสำหรับการสึกหรอที่สมดุล",
"comboDefaultsGuideTitle": "วิธีปรับแต่งค่าเริ่มต้นคอมโบ",
"comboDefaultsGuideHint1": "พยายามลองใหม่ให้ต่ำในกระแสเวลาแฝงต่ำ เพิ่มการหมดเวลาเฉพาะสำหรับงานที่ใช้เวลานานเท่านั้น",
"comboDefaultsGuideHint2": "ใช้การแทนที่ผู้ให้บริการเมื่อผู้ให้บริการรายหนึ่งต้องการพฤติกรรมการหมดเวลา/การลองใหม่ที่แตกต่างไปจากค่าเริ่มต้นส่วนกลาง"
"comboDefaultsGuideHint2": "ใช้การแทนที่ผู้ให้บริการเมื่อผู้ให้บริการรายหนึ่งต้องการพฤติกรรมการหมดเวลา/การลองใหม่ที่แตกต่างไปจากค่าเริ่มต้นส่วนกลาง",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "นักแปล",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -185,7 +185,14 @@
"themeViolet": "Menekşe",
"themeOrange": "Turuncu",
"themeCyan": "Camgöbeği",
"cliToolsShort": "Araçlar"
"cliToolsShort": "Araçlar",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System",
"cache": "Cache",
"cacheShort": "Cache"
},
"themesPage": {
"title": "Temalar",
@@ -715,6 +722,10 @@
},
"4": {
"title": "Modeli Seçin"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -742,6 +753,30 @@
"notes": {
"0": "Kiro, Amazon hesabı gerektirir."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
}
},
@@ -849,6 +884,11 @@
"when": "Maliyeti düşürmek birinci önceliğinizse.",
"avoid": "Fiyatlandırma verileri eksik veya güncel değil.",
"example": "Düşük maliyetin öncelikli olduğu arka plan veya toplu işler."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -942,6 +982,13 @@
"tip1": "Seçilen tüm modellerde fiyatlandırma kapsamasını sağlayın.",
"tip2": "Zor istemler için kaliteli bir yedek bulundurun.",
"tip3": "Maliyetin ana KPI olduğu toplu/arka plan işlerinde kullanın."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Ücretsiz Yığın ($0)",
@@ -1065,7 +1112,25 @@
"a2aQuickStartStep3": "Görevleri `tasks/get` ve `tasks/cancel` ile izleyin ve yönetin.",
"completionsLegacy": "Tamamlamalar (Eski)",
"completionsLegacyDesc": "Eski OpenAI metin tamamlamaları — hem bilgi istemi dizesini hem de mesaj dizisi biçimini kabul eder",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"endpoints": {
"tabProxy": "Uç Nokta Proxy",
@@ -1651,7 +1716,13 @@
"modelsPathHint": "Doğrulama için özel model yolu (ör. /v4/models)",
"allModelsAlreadyImported": "Tüm modeller zaten içe aktarıldı",
"noNewModelsToImport": "İçe aktarılacak yeni model yok — tüm modeller zaten kayıt defterinde veya özel modeller listesinde",
"skippingExistingModels": "{count} mevcut model atlanıyor"
"skippingExistingModels": "{count} mevcut model atlanıyor",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Ayarlar",
@@ -2060,7 +2131,25 @@
"customPricingNote": "Belirli modeller için varsayılan fiyatlandırmayı geçersiz kılabilirsiniz. Özel geçersiz kılmalar, otomatik algılanan fiyatlandırmaya göre öncelik kazanır.",
"editPricing": "Fiyatlandırmayı Düzenle",
"viewFullDetails": "Tüm Ayrıntıları Görüntüle",
"themeCoral": "Mercan"
"themeCoral": "Mercan",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Çeviri",
@@ -2853,5 +2942,74 @@
"userInitial": "Bir konuda yardıma ihtiyacım var.",
"userFollowUp": "Bunu detaylandırabilir misiniz?"
}
},
"cache": {
"title": "Cache Management",
"behavior": "Cache Behavior",
"behaviorBypass": "Bypass with header {header}.",
"tokensSavedSub": "Estimated from hits",
"unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
"memoryEntries": "Memory Entries",
"dedupWindow": "Dedup Window",
"hitRate": "Hit Rate",
"idempotency": "Idempotency Layer",
"memoryEntriesSub": "In-memory LRU",
"tokensSaved": "Tokens Saved",
"cacheHits": "Cache Hits",
"autoRefresh": "Auto-refreshes every {seconds}s",
"dbEntriesSub": "Persisted (SQLite)",
"misses": "Misses",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"cacheHitsSub": "of {total} total",
"total": "Total",
"refresh": "Refresh",
"clearAll": "Clear All",
"performance": "Cache Performance",
"unavailable": "Cache unavailable",
"description": "Monitor and manage semantic response cache, hit rates, and token savings.",
"clearError": "Failed to clear cache.",
"clearSuccess": "Cache cleared. {count} expired entries removed.",
"hits": "Hits",
"dbEntries": "DB Entries",
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"activeDedupKeys": "Active Dedup Keys",
"behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro потрібен обліковий запис Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Не вдалося вимкнути автоматичну синхронізацію",
"allModelsAlreadyImported": "Усі моделі вже імпортовано",
"noNewModelsToImport": "Немає нових моделей для імпорту — усі моделі вже є в реєстрі або списку користувацьких моделей",
"skippingExistingModels": "Пропуск {count} наявних моделей"
"skippingExistingModels": "Пропуск {count} наявних моделей",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Налаштування",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Якщо постачальники відрізняються за якістю/вартістю, почніть із Cost Opt для фонової роботи та Least Used для збалансованого зносу.",
"comboDefaultsGuideTitle": "Як налаштувати параметри комбо за замовчуванням",
"comboDefaultsGuideHint1": "Зберігайте низькі повторні спроби в потоках із низькою затримкою; збільшити час очікування лише для завдань тривалого покоління.",
"comboDefaultsGuideHint2": "Використовуйте перевизначення постачальника, коли одному постачальнику потрібна інша поведінка тайм-ауту/повторної спроби, ніж глобальні стандартні налаштування."
"comboDefaultsGuideHint2": "Використовуйте перевизначення постачальника, коли одному постачальнику потрібна інша поведінка тайм-ауту/повторної спроби, ніж глобальні стандартні налаштування.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Перекладач",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -187,7 +187,12 @@
"autoCombo": "Auto Combo",
"searchTools": "Search Tools",
"cache": "Cache",
"cacheShort": "Cache"
"cacheShort": "Cache",
"cliSection": "CLI",
"debugSection": "Debug",
"helpSection": "Help",
"primarySection": "Main",
"systemSection": "System"
},
"themesPage": {
"title": "Themes",
@@ -645,6 +650,10 @@
},
"4": {
"title": "Select Model"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -672,6 +681,30 @@
"notes": {
"0": "Kiro yêu cầu tài khoản Amazon."
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
@@ -800,6 +833,11 @@
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -893,6 +931,13 @@
"tip1": "Ensure pricing coverage for all selected models.",
"tip2": "Keep a quality fallback for hard prompts.",
"tip3": "Use for batch/background jobs where cost is the main KPI."
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "Free Stack ($0)",
@@ -1016,7 +1061,25 @@
"webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
"searchProvider": "Search Provider",
"searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."
"cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
"cloudflaredDisable": "Stop Tunnel",
"cloudflaredEnable": "Enable Tunnel",
"cloudflaredError": "Error",
"cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
"cloudflaredInstallAndEnable": "Install & Enable",
"cloudflaredLastError": "Last error: {error}",
"cloudflaredNotInstalled": "Not installed",
"cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
"cloudflaredRunning": "Running",
"cloudflaredStarted": "Cloudflare tunnel started",
"cloudflaredStarting": "Starting",
"cloudflaredStopped": "Cloudflare tunnel stopped",
"cloudflaredStoppedState": "Stopped",
"cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
"cloudflaredTitle": "Cloudflare Quick Tunnel",
"cloudflaredUnsupported": "Unsupported",
"cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
"cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
@@ -1590,7 +1653,13 @@
"autoSyncToggleFailed": "Không chuyển đổi được tính năng tự động đồng bộ hóa",
"allModelsAlreadyImported": "Tất cả mô hình đã được nhập",
"noNewModelsToImport": "Không có mô hình mới để nhập — tất cả mô hình đã có trong danh mục hoặc danh sách mô hình tùy chỉnh",
"skippingExistingModels": "Bỏ qua {count} mô hình hiện có"
"skippingExistingModels": "Bỏ qua {count} mô hình hiện có",
"applyCodexAuthLocal": "Apply auth",
"codexAuthAppliedLocal": "Codex auth.json applied locally",
"codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
"codexAuthExportFailed": "Failed to export Codex auth.json",
"codexAuthExported": "Codex auth.json exported",
"exportCodexAuthFile": "Export auth"
},
"settings": {
"title": "Cài đặt",
@@ -1999,7 +2068,25 @@
"routingAdvancedGuideHint2": "Nếu các nhà cung cấp khác nhau về chất lượng/chi phí, hãy bắt đầu với Cost Opt cho công việc nền và Ít được sử dụng nhất để cân bằng độ hao mòn.",
"comboDefaultsGuideTitle": "Cách điều chỉnh mặc định kết hợp",
"comboDefaultsGuideHint1": "Giữ số lần thử ở mức thấp trong các luồng có độ trễ thấp; chỉ tăng thời gian chờ cho các tác vụ tạo dài.",
"comboDefaultsGuideHint2": "Sử dụng ghi đè nhà cung cấp khi một nhà cung cấp cần hành vi hết thời gian chờ/thử lại khác với mặc định chung."
"comboDefaultsGuideHint2": "Sử dụng ghi đè nhà cung cấp khi một nhà cung cấp cần hành vi hết thời gian chờ/thử lại khác với mặc định chung.",
"sidebarVisibility": "Hide sidebar items",
"sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
"sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
"semanticCache": "Semantic Cache",
"autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
"preserveClientCache": "Preserve Client Cache",
"cacheSettings": "Cache Settings",
"autoDisableThreshold": "Ban Threshold",
"autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
"ttlMinutes": "TTL (minutes)",
"maxEntries": "Max Entries",
"loading": "Loading...",
"save": "Save",
"autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
"debugToggle": "Enable Debug Mode",
"sidebarVisibilityToggle": "Show Sidebar Items",
"enabled": "Enabled",
"strategy": "Strategy"
},
"translator": {
"title": "Người phiên dịch",
@@ -2886,6 +2973,43 @@
"behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
"behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
"activeDedupKeys": "Active Dedup Keys",
"dedupWindow": "Dedup Window"
"dedupWindow": "Dedup Window",
"inputTokens": "Input Tokens",
"requestsShort": "reqs",
"inputShort": "In",
"resetting": "Resetting...",
"cachedTokensCol": "Cached",
"search": "Search",
"cacheReuseRatioDesc": "Cached tokens / Total input tokens",
"resetMetrics": "Reset Metrics",
"loading": "Loading...",
"cachedRequests": "Cached Requests",
"model": "Model",
"cached": "Cached",
"actions": "Actions",
"trend24h": "Cache Trend (24h)",
"cachedShort": "Cached",
"cacheCreation": "Creation",
"byProvider": "Breakdown by Provider",
"created": "Created",
"cacheCreationTokens": "Cache Creation Tokens",
"withCacheControl": "With Cache Control",
"searchEntries": "Search entries...",
"cacheReuseRatio": "Cache Reuse Ratio",
"estCostSaved": "Est. Cost Saved",
"cachedTokens": "Cached Tokens",
"requests": "Requests",
"signature": "Signature",
"cacheCreationWrite": "Cache Creation (Write)",
"expires": "Expires",
"writeShort": "Write",
"cacheHitRate": "Cache Hit Rate",
"cacheMetrics": "Prompt Cache Metrics",
"overview": "Overview",
"promptCache": "Prompt Cache (Provider-Side)",
"provider": "Provider",
"cachedTokensRead": "Cached Tokens (Read)",
"entries": "Entries",
"noEntries": "No cache entries found"
}
}
}

View File

@@ -701,6 +701,10 @@
},
"4": {
"title": "选择模型"
},
"5": {
"title": "Use Thinking Variant",
"desc": "For thinking models, run with --variant high/low/max (example command below)."
}
},
"notes": {
@@ -728,6 +732,30 @@
"notes": {
"0": "Kiro 需要 Amazon 账户。"
}
},
"windsurf": {
"steps": {
"1": {
"title": "Open AI Settings",
"desc": "Click the AI Settings icon in Windsurf or go to Settings"
},
"2": {
"title": "Add Custom Provider",
"desc": "Select \"Add custom provider\" (OpenAI-compatible)"
},
"3": {
"title": "Base URL",
"desc": "http://127.0.0.1:20128/v1"
},
"4": {
"title": "API Key",
"desc": "Select your OmniRoute API key"
},
"5": {
"title": "Select Model",
"desc": "Choose a model from the dropdown"
}
}
}
},
"mitmHowWorksDesc": "{toolName} 会先向原始提供商端点发起请求,随后由 MITM 拦截并重定向到 OmniRoute。",
@@ -856,6 +884,11 @@
"when": "降低成本是你的首要目标。",
"avoid": "定价数据缺失或已经过期。",
"example": "后台任务或批处理作业,优先考虑更低成本。"
},
"strict-random": {
"when": "Use when you want perfectly even spread — each model used once before repeating.",
"avoid": "Avoid when models have different quality or latency and order matters.",
"example": "Example: Multiple accounts of the same model to distribute usage evenly."
}
},
"advancedHelp": {
@@ -949,6 +982,13 @@
"tip1": "确保所有已选模型都具备定价信息。",
"tip2": "为高难度提示保留一个质量更高的回退模型。",
"tip3": "适合批处理或后台任务等成本是主要指标的场景。"
},
"strict-random": {
"title": "Shuffle deck distribution",
"description": "Each model is used exactly once per cycle before reshuffling.",
"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."
}
},
"templateFreeStack": "免费栈($0",
@@ -2972,4 +3012,4 @@
"withCacheControl": "含缓存控制",
"writeShort": "写入"
}
}
}

View File

@@ -4,17 +4,18 @@ import { existsSync, readFileSync } from "fs";
/**
* Get raw machine ID using OS-specific methods.
*
* IMPORTANT: We do NOT use `if (process.platform === ...)` branching here.
* Next.js SWC bundler evaluates `process.platform` at BUILD time, so when the
* project is built on Linux, the win32/darwin branches get dead-code-eliminated
* and the Linux fallback (which uses `head`) runs on Windows at runtime.
* We use try/catch waterfall: try each OS method and fall through
* to the next on failure. Platform checks are INSIDE try blocks so they
* run at RUNTIME (not build time), avoiding Next.js SWC dead-code elimination.
*
* Instead, we use a try/catch waterfall: try each OS method and fall through
* to the next on failure. The correct method always succeeds on the target OS.
* On Linux: skips Windows (REG.exe) and macOS (ioreg) strategies entirely.
*/
function getMachineIdRaw(): string {
// Strategy 1: Windows — REG.exe query for MachineGuid
try {
if (process.platform !== "win32") {
throw new Error("Not Windows");
}
const sysRoot = process.env.SystemRoot || process.env.windir || "C:\\Windows";
const regPath = `${sysRoot}\\System32\\REG.exe`;
if (existsSync(regPath)) {
@@ -35,6 +36,9 @@ function getMachineIdRaw(): string {
// Strategy 2: macOS — ioreg IOPlatformUUID
try {
if (process.platform !== "darwin") {
throw new Error("Not macOS");
}
const output = execSync("ioreg -rd1 -c IOPlatformExpertDevice", {
encoding: "utf8",
timeout: 5000,