chore: merge PRs #581, #582 + local improvements for rc16

Merged PRs:
- #582 — model prefix stripping option (closes #568)
- #581 — npm publish workflow fix (refs #579)

Local changes:
- Restored stashed i18n, CLI tools, and maintenance banner updates
- 926 tests passing
This commit is contained in:
diegosouzapw 2026-03-24 13:32:05 -03:00
parent d412edbbe1
commit 3218563f32
52 changed files with 2613 additions and 372 deletions

View file

@ -142,10 +142,10 @@ The provider prefix is auto-added if missing. Mismatched models return `400`.
```bash
# Get cache stats
GET /api/cache
GET /api/cache/stats
# Clear all caches
DELETE /api/cache
DELETE /api/cache/stats
```
Response example:
@ -218,7 +218,7 @@ Response example:
| Endpoint | Method | Description |
| ------------------------------- | ------- | ---------------------- |
| `/api/settings` | GET/PUT | General settings |
| `/api/settings` | GET/PUT/PATCH | General settings |
| `/api/settings/proxy` | GET/PUT | Network proxy config |
| `/api/settings/proxy/test` | POST | Test proxy connection |
| `/api/settings/ip-filter` | GET/PUT | IP allowlist/blocklist |
@ -231,8 +231,8 @@ Response example:
| ------------------------ | ---------- | ----------------------- |
| `/api/sessions` | GET | Active session tracking |
| `/api/rate-limits` | GET | Per-account rate limits |
| `/api/monitoring/health` | GET | Health check |
| `/api/cache` | GET/DELETE | Cache stats / clear |
| `/api/monitoring/health` | GET | Health check + provider summary (`catalogCount`, `configuredCount`, `activeCount`, `monitoredCount`) |
| `/api/cache/stats` | GET/DELETE | Cache stats / clear |
### Backup & Export/Import
@ -279,7 +279,7 @@ GET response includes `agents[]` (id, name, binary, version, installed, protocol
| Endpoint | Method | Description |
| ----------------------- | ------- | ------------------------------- |
| `/api/resilience` | GET/PUT | Get/update resilience profiles |
| `/api/resilience` | GET/PATCH | Get/update resilience profiles |
| `/api/resilience/reset` | POST | Reset circuit breakers |
| `/api/rate-limits` | GET | Per-account rate limit status |
| `/api/rate-limit` | GET | Global rate limit configuration |

View file

@ -2,7 +2,7 @@
🌐 **Languages:** 🇺🇸 [English](ARCHITECTURE.md) | 🇧🇷 [Português (Brasil)](i18n/pt-BR/ARCHITECTURE.md) | 🇪🇸 [Español](i18n/es/ARCHITECTURE.md) | 🇫🇷 [Français](i18n/fr/ARCHITECTURE.md) | 🇮🇹 [Italiano](i18n/it/ARCHITECTURE.md) | 🇷🇺 [Русский](i18n/ru/ARCHITECTURE.md) | 🇨🇳 [中文 (简体)](i18n/zh-CN/ARCHITECTURE.md) | 🇩🇪 [Deutsch](i18n/de/ARCHITECTURE.md) | 🇮🇳 [हिन्दी](i18n/in/ARCHITECTURE.md) | 🇹🇭 [ไทย](i18n/th/ARCHITECTURE.md) | 🇺🇦 [Українська](i18n/uk-UA/ARCHITECTURE.md) | 🇸🇦 [العربية](i18n/ar/ARCHITECTURE.md) | 🇯🇵 [日本語](i18n/ja/ARCHITECTURE.md) | 🇻🇳 [Tiếng Việt](i18n/vi/ARCHITECTURE.md) | 🇧🇬 [Български](i18n/bg/ARCHITECTURE.md) | 🇩🇰 [Dansk](i18n/da/ARCHITECTURE.md) | 🇫🇮 [Suomi](i18n/fi/ARCHITECTURE.md) | 🇮🇱 [עברית](i18n/he/ARCHITECTURE.md) | 🇭🇺 [Magyar](i18n/hu/ARCHITECTURE.md) | 🇮🇩 [Bahasa Indonesia](i18n/id/ARCHITECTURE.md) | 🇰🇷 [한국어](i18n/ko/ARCHITECTURE.md) | 🇲🇾 [Bahasa Melayu](i18n/ms/ARCHITECTURE.md) | 🇳🇱 [Nederlands](i18n/nl/ARCHITECTURE.md) | 🇳🇴 [Norsk](i18n/no/ARCHITECTURE.md) | 🇵🇹 [Português (Portugal)](i18n/pt/ARCHITECTURE.md) | 🇷🇴 [Română](i18n/ro/ARCHITECTURE.md) | 🇵🇱 [Polski](i18n/pl/ARCHITECTURE.md) | 🇸🇰 [Slovenčina](i18n/sk/ARCHITECTURE.md) | 🇸🇪 [Svenska](i18n/sv/ARCHITECTURE.md) | 🇵🇭 [Filipino](i18n/phi/ARCHITECTURE.md) | 🇨🇿 [Čeština](i18n/cs/ARCHITECTURE.md)
_Last updated: 2026-03-04_
_Last updated: 2026-03-24_
## Executive Summary
@ -65,6 +65,26 @@ Primary runtime model:
- Provider SLA/control plane outside local process
- External CLI binaries themselves (Claude CLI, Codex CLI, etc.)
## Dashboard Surface (Current)
Main pages under `src/app/(dashboard)/dashboard/`:
- `/dashboard` — quick start + provider overview
- `/dashboard/endpoint` — endpoint proxy + MCP + A2A + API endpoint tabs
- `/dashboard/providers` — provider connections and credentials
- `/dashboard/combos` — combo strategies, templates, model routing rules
- `/dashboard/costs` — cost aggregation and pricing visibility
- `/dashboard/analytics` — usage analytics and evaluations
- `/dashboard/limits` — quota/rate controls
- `/dashboard/cli-tools` — CLI onboarding, runtime detection, config generation
- `/dashboard/agents` — detected ACP agents + custom agent registration
- `/dashboard/media` — image/video/music playground
- `/dashboard/search-tools` — search provider testing and history
- `/dashboard/health` — uptime, circuit breakers, rate limits
- `/dashboard/logs` — request/proxy/audit/console logs
- `/dashboard/settings` — system settings tabs (general, routing, combo defaults, etc.)
- `/dashboard/api-manager` — API key lifecycle and model permissions
## High-Level System Context
```mermaid

View file

@ -9,7 +9,7 @@ cost tracking, model switching, and request logging across every tool.
## How It Works
```
Claude / Codex / Gemini CLI / OpenCode / Cline / KiloCode / Continue / Kiro CLI
Claude / Codex / OpenCode / Cline / KiloCode / Continue / Kiro / Cursor / Copilot
▼ (all point to OmniRoute)
http://YOUR_SERVER:20128/v1
@ -27,21 +27,38 @@ Claude / Codex / Gemini CLI / OpenCode / Cline / KiloCode / Continue / Kiro CLI
---
## Supported Tools
## Supported Tools (Dashboard Source of Truth)
| Tool | Command | Type | Install Method |
| ---------------- | ------------------- | ----------------- | -------------- |
| **Claude Code** | `claude` | CLI | npm |
| **OpenAI Codex** | `codex` | CLI | npm |
| **Gemini CLI** | `gemini` | CLI | npm |
| **OpenCode** | `opencode` | CLI | npm |
| **Cline** | `cline` | CLI + VS Code ext | npm |
| **KiloCode** | `kilocode` / `kilo` | CLI + VS Code ext | npm |
| **Continue** | guide-based | VS Code ext | VS Code |
| **Kiro CLI** | `kiro-cli` | CLI | curl installer |
| **Cursor** | `cursor` | Desktop app | Download |
| **Droid** | web-based | Built-in agent | OmniRoute |
| **OpenClaw** | web-based | Built-in agent | OmniRoute |
The dashboard cards in `/dashboard/cli-tools` are generated from `src/shared/constants/cliTools.ts`.
Current list (v3.0.0-rc.16):
| Tool | ID | Command | Setup Mode | Install Method |
| ---------------- | ------------- | ------------ | ---------- | -------------- |
| **Claude Code** | `claude` | `claude` | env | npm |
| **OpenAI Codex** | `codex` | `codex` | custom | npm |
| **Factory Droid**| `droid` | `droid` | custom | bundled/CLI |
| **OpenClaw** | `openclaw` | `openclaw` | custom | bundled/CLI |
| **Cursor** | `cursor` | app | guide | desktop app |
| **Cline** | `cline` | `cline` | custom | npm |
| **Kilo Code** | `kilo` | `kilocode` | custom | npm |
| **Continue** | `continue` | extension | guide | VS Code |
| **Antigravity** | `antigravity` | internal | mitm | OmniRoute |
| **GitHub Copilot**| `copilot` | extension | custom | VS Code |
| **OpenCode** | `opencode` | `opencode` | guide | npm |
| **Kiro AI** | `kiro` | app/cli | mitm | desktop/CLI |
### CLI fingerprint sync (Agents + Settings)
`/dashboard/agents` and `Settings > CLI Fingerprint` use `src/shared/constants/cliCompatProviders.ts`.
This keeps provider IDs aligned with CLI cards and legacy IDs.
| CLI ID | Fingerprint Provider ID |
| ------ | ----------------------- |
| `kilo` | `kilocode` |
| `copilot` | `github` |
| `claude` / `codex` / `antigravity` / `kiro` / `cursor` / `cline` / `opencode` / `droid` / `openclaw` | same ID |
Legacy IDs still accepted for compatibility: `copilot`, `kimi-coding`, `qwen`.
---
@ -67,9 +84,6 @@ npm install -g @anthropic-ai/claude-code
# OpenAI Codex
npm install -g @openai/codex
# Gemini CLI (Google)
npm install -g @google/gemini-cli
# OpenCode
npm install -g opencode-ai
@ -77,7 +91,7 @@ npm install -g opencode-ai
npm install -g cline
# KiloCode
npm install -g kilecode
npm install -g kilocode
# Kiro CLI (Amazon — requires curl + unzip)
apt-get install -y unzip # on Debian/Ubuntu
@ -90,7 +104,6 @@ export PATH="$HOME/.local/bin:$PATH" # add to ~/.bashrc
```bash
claude --version # 2.x.x
codex --version # 0.x.x
gemini --version # 0.x.x
opencode --version # x.x.x
cline --version # 2.x.x
kilocode --version # x.x.x (or: kilo --version)
@ -153,21 +166,6 @@ EOF
---
### Gemini CLI
```bash
mkdir -p ~/.gemini && cat > ~/.gemini/settings.json << EOF
{
"apiKey": "sk-your-omniroute-key",
"baseUrl": "http://localhost:20128/v1"
}
EOF
```
**Test:** `gemini "hello"`
---
### OpenCode
```bash
@ -324,17 +322,16 @@ They run as internal routes and use OmniRoute's model routing automatically.
OMNIROUTE_URL="http://localhost:20128/v1"
OMNIROUTE_KEY="sk-your-omniroute-key"
npm install -g @anthropic-ai/claude-code @openai/codex @google/gemini-cli opencode-ai cline kilecode
npm install -g @anthropic-ai/claude-code @openai/codex opencode-ai cline kilocode
# Kiro CLI
apt-get install -y unzip 2>/dev/null; curl -fsSL https://cli.kiro.dev/install | bash
# Write configs
mkdir -p ~/.claude ~/.codex ~/.gemini ~/.config/opencode ~/.continue
mkdir -p ~/.claude ~/.codex ~/.config/opencode ~/.continue
cat > ~/.claude/settings.json <<< "{\"apiBaseUrl\":\"$OMNIROUTE_URL\",\"apiKey\":\"$OMNIROUTE_KEY\"}"
cat > ~/.codex/config.yaml <<< "model: auto\napiKey: $OMNIROUTE_KEY\napiBaseUrl: $OMNIROUTE_URL"
cat > ~/.gemini/settings.json <<< "{\"apiKey\":\"$OMNIROUTE_KEY\",\"baseUrl\":\"$OMNIROUTE_URL\"}"
cat >> ~/.bashrc << EOF
export OPENAI_BASE_URL="$OMNIROUTE_URL"
export OPENAI_API_KEY="$OMNIROUTE_KEY"

View file

@ -29,6 +29,7 @@ const eslintConfig = [
ignores: [
// Next.js build output
".next/**",
"src/.next/**",
"out/**",
"build/**",
"next-env.d.ts",

View file

@ -47,7 +47,7 @@
"homepage": "https://omniroute.online",
"scripts": {
"dev": "node scripts/run-next.mjs dev",
"build": "next build",
"build": "node scripts/build-next-isolated.mjs",
"build:cli": "node scripts/prepublish.mjs",
"start": "node scripts/run-next.mjs start",
"lint": "eslint .",

View file

@ -0,0 +1,84 @@
#!/usr/bin/env node
import fs from "node:fs/promises";
import path from "node:path";
import { spawn } from "node:child_process";
/**
* This repository contains a legacy `app/` snapshot (packaging/runtime artifacts)
* alongside the active Next.js source in `src/app/`. Next.js route discovery scans
* both and fails the build on legacy files. We temporarily move the legacy folder
* out of the project root during `next build`, then restore it in all outcomes.
*/
const projectRoot = process.cwd();
const legacyAppDir = path.join(projectRoot, "app");
const backupDir = path.join(projectRoot, `.app-build-backup-${process.pid}-${Date.now()}`);
async function exists(targetPath) {
try {
await fs.access(targetPath);
return true;
} catch {
return false;
}
}
function runNextBuild() {
return new Promise((resolve) => {
const nextBin = path.join(projectRoot, "node_modules", "next", "dist", "bin", "next");
const child = spawn(process.execPath, [nextBin, "build"], {
cwd: projectRoot,
stdio: "inherit",
env: process.env,
});
const forward = (signal) => {
if (!child.killed) child.kill(signal);
};
process.on("SIGINT", forward);
process.on("SIGTERM", forward);
child.on("exit", (code, signal) => {
process.off("SIGINT", forward);
process.off("SIGTERM", forward);
if (signal) {
resolve({ code: 1, signal });
return;
}
resolve({ code: code ?? 1, signal: null });
});
});
}
async function main() {
let moved = false;
try {
if (await exists(legacyAppDir)) {
await fs.rename(legacyAppDir, backupDir);
moved = true;
}
const result = await runNextBuild();
process.exitCode = result.code;
} catch (error) {
console.error("[build-next-isolated] Build failed:", error);
process.exitCode = 1;
} finally {
if (moved) {
try {
await fs.rename(backupDir, legacyAppDir);
} catch (restoreError) {
console.error(
`[build-next-isolated] Failed to restore legacy app dir from ${backupDir}:`,
restoreError
);
process.exitCode = 1;
}
}
}
}
await main();

View file

@ -1,9 +1,11 @@
"use client";
import { useState, useEffect, useCallback } from "react";
import Link from "next/link";
import { Card, Button, Input } from "@/shared/components";
import { useTranslations } from "next-intl";
import { AI_PROVIDERS } from "@/shared/constants/config";
import { CLI_COMPAT_PROVIDER_IDS } from "@/shared/constants/cliCompatProviders";
interface AgentInfo {
id: string;
@ -180,6 +182,51 @@ export default function AgentsPage() {
</div>
)}
{/* Setup Guide */}
<Card>
<div className="flex items-center justify-between gap-3 mb-4">
<div className="flex items-center gap-3">
<div className="p-2 rounded-lg bg-blue-500/10 text-blue-500">
<span className="material-symbols-outlined text-[20px]" aria-hidden="true">
support
</span>
</div>
<h3 className="text-lg font-semibold">{t("setupGuideTitle")}</h3>
</div>
<Link
href="/dashboard/cli-tools"
className="text-xs px-2.5 py-1.5 rounded-lg border border-border/60 hover:bg-surface/40 transition-colors"
>
{t("openCliTools")}
</Link>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-3">
<div className="rounded-lg border border-border/50 bg-black/[0.02] dark:bg-white/[0.02] p-3">
<div className="flex items-center gap-2 mb-1.5">
<span className="material-symbols-outlined text-[16px] text-blue-500">radar</span>
<p className="text-sm font-medium">{t("setupGuideDetectCliTitle")}</p>
</div>
<p className="text-xs text-text-muted">{t("setupGuideDetectCliDesc")}</p>
</div>
<div className="rounded-lg border border-border/50 bg-black/[0.02] dark:bg-white/[0.02] p-3">
<div className="flex items-center gap-2 mb-1.5">
<span className="material-symbols-outlined text-[16px] text-amber-500">build</span>
<p className="text-sm font-medium">{t("setupGuideCustomAgentTitle")}</p>
</div>
<p className="text-xs text-text-muted">{t("setupGuideCustomAgentDesc")}</p>
</div>
<div className="rounded-lg border border-border/50 bg-black/[0.02] dark:bg-white/[0.02] p-3">
<div className="flex items-center gap-2 mb-1.5">
<span className="material-symbols-outlined text-[16px] text-emerald-500">
terminal
</span>
<p className="text-sm font-medium">{t("setupGuideCommandMissingTitle")}</p>
</div>
<p className="text-xs text-text-muted">{t("setupGuideCommandMissingDesc")}</p>
</div>
</div>
</Card>
{/* CLI Fingerprint Matching */}
<Card>
<div className="flex items-center gap-3 mb-4">
@ -193,24 +240,7 @@ export default function AgentsPage() {
<div className="flex flex-col gap-4">
<p className="text-sm text-text-muted">{ts("cliFingerprintDesc")}</p>
<div className="flex flex-wrap gap-2">
{(
[
"codex",
"claude",
"github",
"antigravity",
"kiro",
"cursor",
"kimi-coding",
"kilocode",
"cline",
"qwen",
"droid",
"openclaw",
"copilot",
"opencode",
] as const
).map((providerId) => {
{CLI_COMPAT_PROVIDER_IDS.map((providerId) => {
const providerMeta = Object.values(AI_PROVIDERS).find(
(p: any) => p.id === providerId
) as any;

View file

@ -33,6 +33,16 @@ export default function CLIToolsPageClient({ machineId }) {
const [apiKeys, setApiKeys] = useState([]);
const [toolStatuses, setToolStatuses] = useState({});
const [statusesLoaded, setStatusesLoaded] = useState(false);
const translateOrFallback = useCallback(
(key, fallback, values = undefined) => {
try {
return t(key, values);
} catch {
return fallback;
}
},
[t]
);
useEffect(() => {
fetchConnections();
@ -291,8 +301,42 @@ export default function CLIToolsPageClient({ machineId }) {
}
};
const getToolDocsHref = (toolId, tool) => {
if (typeof tool.docsUrl === "string" && tool.docsUrl.trim()) {
return tool.docsUrl.trim();
}
return `/docs?section=cli-tools&tool=${toolId}`;
};
const getToolUseCase = (toolId, tool) => {
const fallbackDescription = translateOrFallback(`toolDescriptions.${toolId}`, tool.description);
return translateOrFallback(`toolUseCases.${toolId}`, fallbackDescription);
};
return (
<div className="flex flex-col gap-6">
<Card>
<div className="flex items-start gap-3">
<div className="p-2 rounded-lg bg-primary/10 text-primary">
<span className="material-symbols-outlined text-[20px]">tips_and_updates</span>
</div>
<div className="flex-1 min-w-0">
<h2 className="text-sm font-semibold">{t("howItWorks")}</h2>
<div className="mt-2 grid grid-cols-1 md:grid-cols-3 gap-2 text-xs text-text-muted">
<div className="rounded-lg border border-border/50 bg-black/[0.02] dark:bg-white/[0.02] p-2.5">
{t("installationGuide")}
</div>
<div className="rounded-lg border border-border/50 bg-black/[0.02] dark:bg-white/[0.02] p-2.5">
{t("configureEndpoint")}
</div>
<div className="rounded-lg border border-border/50 bg-black/[0.02] dark:bg-white/[0.02] p-2.5">
{t("testConnection")}
</div>
</div>
</div>
</div>
</Card>
{!hasActiveProviders && (
<Card className="border-yellow-500/50 bg-yellow-500/5">
<div className="flex items-center gap-3">
@ -308,7 +352,38 @@ export default function CLIToolsPageClient({ machineId }) {
)}
<div className="flex flex-col gap-4">
{Object.entries(CLI_TOOLS).map(([toolId, tool]) => renderToolCard(toolId, tool))}
{Object.entries(CLI_TOOLS).map(([toolId, tool]) => {
const docsHref = getToolDocsHref(toolId, tool);
const isExternalDocs = /^https?:\/\//i.test(docsHref);
return (
<div key={toolId} className="flex flex-col gap-2.5">
{renderToolCard(toolId, tool)}
<div className="rounded-lg border border-border/50 bg-black/[0.02] dark:bg-white/[0.02] p-3">
<div className="flex flex-col sm:flex-row sm:items-start sm:justify-between gap-2.5">
<div className="min-w-0">
<p className="text-[11px] font-semibold uppercase tracking-wide text-text-muted">
{t("whenToUseLabel")}
</p>
<p className="text-xs text-text-muted mt-1 break-words">
{getToolUseCase(toolId, tool)}
</p>
</div>
<a
href={docsHref}
target={isExternalDocs ? "_blank" : undefined}
rel={isExternalDocs ? "noopener noreferrer" : undefined}
className="inline-flex items-center gap-1.5 text-xs text-primary hover:text-primary/80 transition-colors whitespace-nowrap"
>
<span className="material-symbols-outlined text-[14px]" aria-hidden="true">
menu_book
</span>
{t("openToolDocs")}
</a>
</div>
</div>
</div>
);
})}
</div>
</div>
);

View file

@ -16,27 +16,18 @@ import Tooltip from "@/shared/components/Tooltip";
import ModelRoutingSection from "@/shared/components/ModelRoutingSection";
import { useCopyToClipboard } from "@/shared/hooks/useCopyToClipboard";
import { useNotificationStore } from "@/store/notificationStore";
import { ROUTING_STRATEGIES } from "@/shared/constants/routingStrategies";
import { useTranslations } from "next-intl";
// Validate combo name: letters, numbers, -, _, /, .
const VALID_NAME_REGEX = /^[a-zA-Z0-9_/.-]+$/;
const STRATEGY_OPTIONS = [
{ value: "priority", labelKey: "priority", descKey: "priorityDesc", icon: "sort" },
{ value: "weighted", labelKey: "weighted", descKey: "weightedDesc", icon: "percent" },
{ value: "round-robin", labelKey: "roundRobin", descKey: "roundRobinDesc", icon: "autorenew" },
{ value: "random", labelKey: "random", descKey: "randomDesc", icon: "shuffle" },
{ value: "least-used", labelKey: "leastUsed", descKey: "leastUsedDesc", icon: "low_priority" },
{ value: "cost-optimized", labelKey: "costOpt", descKey: "costOptimizedDesc", icon: "savings" },
{
value: "fill-first",
labelKey: "fillFirst",
descKey: "fillFirstDesc",
icon: "stacked_bar_chart",
},
{ value: "p2c", labelKey: "p2c", descKey: "p2cDesc", icon: "compare_arrows" },
{ value: "strict-random", labelKey: "strictRandom", descKey: "strictRandomDesc", icon: "casino" },
];
const STRATEGY_OPTIONS = ROUTING_STRATEGIES.map((strategy) => ({
value: strategy.value,
labelKey: strategy.labelKey,
descKey: strategy.combosDescKey,
icon: strategy.icon,
}));
const STRATEGY_GUIDANCE_FALLBACK = {
priority: {

View file

@ -134,7 +134,7 @@ export default function HealthPage() {
);
}
const { system, providerHealth, rateLimitStatus, lockouts } = data;
const { system, providerHealth, providerSummary, rateLimitStatus, lockouts } = data;
const cbEntries = Object.entries(providerHealth || {});
const lockoutEntries = Object.entries(lockouts || {});
@ -235,11 +235,37 @@ export default function HealthPage() {
</div>
<span className="text-sm text-text-muted">{t("providers")}</span>
</div>
<p className="text-xl font-semibold text-text-main">{cbEntries.length}</p>
<p className="text-xs text-text-muted mt-1">
{t("healthyCount", {
count: cbEntries.filter(([, v]: [string, any]) => v.state === "CLOSED").length,
<p className="text-xl font-semibold text-text-main">
{providerSummary?.configuredCount ?? cbEntries.length}
</p>
<p
className="text-[11px] text-text-muted mt-1 inline-flex items-center gap-1"
title={t("configuredProvidersHint")}
>
{t("configuredProvidersLabel")}
<span className="material-symbols-outlined text-[12px]" aria-hidden="true">
help
</span>
</p>
<p
className="text-xs text-text-muted inline-flex items-center gap-1"
title={t("activeProvidersHint")}
>
{t("activeProviders", { count: providerSummary?.activeCount ?? 0 })}
<span className="material-symbols-outlined text-[12px]" aria-hidden="true">
info
</span>
</p>
<p
className="text-xs text-text-muted inline-flex items-center gap-1"
title={t("monitoredProvidersHint")}
>
{t("monitoredProviders", {
count: providerSummary?.monitoredCount ?? cbEntries.length,
})}
<span className="material-symbols-outlined text-[12px]" aria-hidden="true">
info
</span>
</p>
</Card>
</div>

View file

@ -119,9 +119,9 @@ export default function SearchToolsClient() {
} catch (err: any) {
setDuration(Date.now() - start);
if (err.name === "AbortError") {
setError("Request timed out (15s)");
setError(t("requestTimedOut", { seconds: 15 }));
} else {
setError(err.message || "Network error");
setError(err?.message || t("networkError"));
}
} finally {
setLoading(false);

View file

@ -33,6 +33,7 @@ interface SearchFormProps {
export default function SearchForm({ onSearch, loading, onCancel, providers }: SearchFormProps) {
const t = useTranslations("search");
const tc = useTranslations("common");
const [query, setQuery] = useState("");
const [provider, setProvider] = useState("auto");
const [searchType, setSearchType] = useState("web");
@ -92,7 +93,7 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
<textarea
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder="Enter search query..."
placeholder={t("queryPlaceholder")}
className="w-full bg-surface border border-border rounded-lg p-2.5 text-sm text-text-main resize-none h-16 focus:outline-none focus:ring-2 focus:ring-primary/30"
onKeyDown={(e) => {
if (e.key === "Enter" && !e.shiftKey) {
@ -114,7 +115,7 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
value={provider}
onChange={(e: any) => setProvider(e.target.value)}
options={[
{ value: "auto", label: "auto (cheapest)" },
{ value: "auto", label: t("providerAuto") },
...activeProviders.map((p) => ({
value: p.id,
label: p.name,
@ -131,8 +132,8 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
value={searchType}
onChange={(e: any) => setSearchType(e.target.value)}
options={[
{ value: "web", label: "web" },
{ value: "news", label: "news" },
{ value: "web", label: t("searchTypeWeb") },
{ value: "news", label: t("searchTypeNews") },
]}
className="w-full"
/>
@ -172,7 +173,7 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
<input
value={country}
onChange={(e) => setCountry(e.target.value)}
placeholder="any"
placeholder={t("optionAny")}
className="w-full bg-surface border border-border rounded-md px-2 py-1.5 text-xs text-text-main focus:outline-none"
/>
</div>
@ -181,7 +182,7 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
<input
value={language}
onChange={(e) => setLanguage(e.target.value)}
placeholder="any"
placeholder={t("optionAny")}
className="w-full bg-surface border border-border rounded-md px-2 py-1.5 text-xs text-text-main focus:outline-none"
/>
</div>
@ -192,11 +193,11 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
value={timeRange}
onChange={(e: any) => setTimeRange(e.target.value)}
options={[
{ value: "", label: "any" },
{ value: "day", label: "Past day" },
{ value: "week", label: "Past week" },
{ value: "month", label: "Past month" },
{ value: "year", label: "Past year" },
{ value: "", label: t("optionAny") },
{ value: "day", label: t("timeRangeDay") },
{ value: "week", label: t("timeRangeWeek") },
{ value: "month", label: t("timeRangeMonth") },
{ value: "year", label: t("timeRangeYear") },
]}
className="w-full"
/>
@ -209,7 +210,7 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
<input
value={domainInput}
onChange={(e) => setDomainInput(e.target.value)}
placeholder="example.com"
placeholder={t("domainPlaceholder")}
className="flex-1 bg-surface border border-border rounded-md px-2 py-1.5 text-xs text-text-main focus:outline-none"
onKeyDown={(e) => e.key === "Enter" && addDomain("include")}
/>
@ -244,7 +245,7 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
<input
value={excludeDomainInput}
onChange={(e) => setExcludeDomainInput(e.target.value)}
placeholder="example.com"
placeholder={t("domainPlaceholder")}
className="flex-1 bg-surface border border-border rounded-md px-2 py-1.5 text-xs text-text-main focus:outline-none"
onKeyDown={(e) => e.key === "Enter" && addDomain("exclude")}
/>
@ -274,9 +275,9 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
value={safeSearch}
onChange={(e: any) => setSafeSearch(e.target.value)}
options={[
{ value: "off", label: "Off" },
{ value: "moderate", label: "Moderate" },
{ value: "strict", label: "Strict" },
{ value: "off", label: t("safeSearchOff") },
{ value: "moderate", label: t("safeSearchModerate") },
{ value: "strict", label: t("safeSearchStrict") },
]}
className="w-full"
/>
@ -289,7 +290,7 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
<div className="p-4 border-b border-border">
{loading ? (
<Button variant="danger" onClick={onCancel} className="w-full">
Cancel
{tc("cancel")}
</Button>
) : (
<Button
@ -298,7 +299,7 @@ export default function SearchForm({ onSearch, loading, onCancel, providers }: S
disabled={noProviders || !query.trim()}
className="w-full"
>
Search
{tc("search")}
</Button>
)}
{noProviders && <p className="text-xs text-text-muted mt-2">{t("noSearchProviders")}</p>}

View file

@ -1,7 +1,7 @@
"use client";
import { useState, useEffect } from "react";
import { useTranslations } from "next-intl";
import { useLocale, useTranslations } from "next-intl";
interface HistoryEntry {
query: string;
@ -14,9 +14,9 @@ interface SearchHistoryProps {
onReplay: (entry: HistoryEntry) => void;
}
function timeAgo(timestamp: string): string {
function timeAgo(timestamp: string, locale: string): string {
try {
const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
const rtf = new Intl.RelativeTimeFormat(locale, { numeric: "auto" });
const diff = Date.now() - new Date(timestamp).getTime();
const minutes = Math.floor(diff / 60_000);
if (minutes < 1) return rtf.format(0, "minute");
@ -25,12 +25,13 @@ function timeAgo(timestamp: string): string {
if (hours < 24) return rtf.format(-hours, "hour");
return rtf.format(-Math.floor(hours / 24), "day");
} catch {
return new Date(timestamp).toLocaleString();
return new Date(timestamp).toLocaleString(locale);
}
}
export default function SearchHistory({ onReplay }: SearchHistoryProps) {
const t = useTranslations("search");
const locale = useLocale();
const [entries, setEntries] = useState<HistoryEntry[]>([]);
useEffect(() => {
@ -57,7 +58,7 @@ export default function SearchHistory({ onReplay }: SearchHistoryProps) {
<div className="text-xs text-text-main truncate">{entry.query}</div>
<div className="flex justify-between mt-0.5">
<span className="text-[10px] text-text-muted">{entry.provider}</span>
<span className="text-[10px] text-text-muted">{timeAgo(entry.timestamp)}</span>
<span className="text-[10px] text-text-muted">{timeAgo(entry.timestamp, locale)}</span>
</div>
</button>
))}

View file

@ -3,6 +3,7 @@
import { useState, useEffect } from "react";
import { Card, Button, Input, Toggle } from "@/shared/components";
import { cn } from "@/shared/utils/cn";
import { ROUTING_STRATEGIES } from "@/shared/constants/routingStrategies";
import { useTranslations } from "next-intl";
export default function ComboDefaultsTab() {
@ -21,14 +22,11 @@ export default function ComboDefaultsTab() {
const [saving, setSaving] = useState(false);
const t = useTranslations("settings");
const tc = useTranslations("common");
const strategyOptions = [
{ value: "priority", label: t("priority"), icon: "sort" },
{ value: "weighted", label: t("weighted"), icon: "percent" },
{ value: "round-robin", label: t("roundRobin"), icon: "autorenew" },
{ value: "random", label: t("random"), icon: "shuffle" },
{ value: "least-used", label: t("leastUsed"), icon: "low_priority" },
{ value: "cost-optimized", label: t("costOpt"), icon: "savings" },
];
const strategyOptions = ROUTING_STRATEGIES.map((strategy) => ({
value: strategy.value,
label: t(strategy.labelKey),
icon: strategy.icon,
}));
const numericSettings = [
{ key: "maxRetries", label: t("maxRetriesLabel"), min: 0, max: 5 },
{ key: "retryDelayMs", label: t("retryDelayLabel"), min: 500, max: 10000, step: 500 },
@ -87,6 +85,13 @@ export default function ComboDefaultsTab() {
<h3 className="text-lg font-semibold">{t("comboDefaultsTitle")}</h3>
<span className="text-xs text-text-muted ml-auto">{t("globalComboConfig")}</span>
</div>
<div className="mb-4 rounded-lg border border-amber-500/20 bg-amber-500/5 p-3">
<p className="text-xs font-medium text-amber-700 dark:text-amber-300">
{t("comboDefaultsGuideTitle")}
</p>
<p className="text-xs text-text-muted mt-1">{t("comboDefaultsGuideHint1")}</p>
<p className="text-xs text-text-muted">{t("comboDefaultsGuideHint2")}</p>
</div>
<div className="flex flex-col gap-4">
{/* Default Strategy */}
<div className="flex items-center justify-between">
@ -97,7 +102,7 @@ export default function ComboDefaultsTab() {
<div
role="tablist"
aria-label={t("comboStrategyAria")}
className="grid grid-cols-3 gap-1 p-0.5 rounded-md bg-black/5 dark:bg-white/5"
className="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-1 p-0.5 rounded-md bg-black/5 dark:bg-white/5"
>
{strategyOptions.map((s) => (
<button

View file

@ -3,31 +3,20 @@
import { useState, useEffect } from "react";
import { Card, Input, Button } from "@/shared/components";
import FallbackChainsEditor from "./FallbackChainsEditor";
import {
ROUTING_STRATEGIES,
SETTINGS_FALLBACK_STRATEGY_VALUES,
} from "@/shared/constants/routingStrategies";
import { useTranslations } from "next-intl";
const STRATEGIES = [
{
value: "fill-first",
labelKey: "fillFirst",
descKey: "fillFirstDesc",
icon: "vertical_align_top",
},
{ value: "round-robin", labelKey: "roundRobin", descKey: "roundRobinDesc", icon: "loop" },
{ value: "p2c", labelKey: "p2c", descKey: "p2cDesc", icon: "balance" },
{ value: "random", labelKey: "random", descKey: "randomDesc", icon: "shuffle" },
{
value: "least-used",
labelKey: "leastUsed",
descKey: "leastUsedDesc",
icon: "low_priority",
},
{
value: "cost-optimized",
labelKey: "costOpt",
descKey: "costOptDesc",
icon: "savings",
},
];
const STRATEGIES = ROUTING_STRATEGIES.filter((strategy) =>
SETTINGS_FALLBACK_STRATEGY_VALUES.includes(strategy.value)
).map((strategy) => ({
value: strategy.value,
labelKey: strategy.labelKey,
descKey: strategy.settingsDescKey,
icon: strategy.icon,
}));
export default function RoutingTab() {
const [settings, setSettings] = useState<any>({ fallbackStrategy: "fill-first" });
@ -36,14 +25,10 @@ export default function RoutingTab() {
const [newPattern, setNewPattern] = useState("");
const [newTarget, setNewTarget] = useState("");
const t = useTranslations("settings");
const strategyHintKeyByValue: Record<string, string> = {
"fill-first": "fillFirstDesc",
"round-robin": "roundRobinDesc",
p2c: "p2cDesc",
random: "randomDesc",
"least-used": "leastUsedDesc",
"cost-optimized": "costOptDesc",
};
const strategyHintKeyByValue = STRATEGIES.reduce<Record<string, string>>((acc, strategy) => {
acc[strategy.value] = strategy.descKey;
return acc;
}, {});
useEffect(() => {
fetch("/api/settings")
@ -99,6 +84,14 @@ export default function RoutingTab() {
<h3 className="text-lg font-semibold">{t("routingStrategy")}</h3>
</div>
<div className="mb-4 rounded-lg border border-blue-500/20 bg-blue-500/5 p-3">
<p className="text-xs font-medium text-blue-700 dark:text-blue-300">
{t("routingAdvancedGuideTitle")}
</p>
<p className="text-xs text-text-muted mt-1">{t("routingAdvancedGuideHint1")}</p>
<p className="text-xs text-text-muted">{t("routingAdvancedGuideHint2")}</p>
</div>
<div
className="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-2 mb-4"
style={{ gridAutoRows: "1fr" }}

View file

@ -37,7 +37,7 @@ export default function SettingsPage() {
const activeTab = userSelectedTab || tabs.find((t) => t.id === tabParam)?.id || "general";
return (
<div className="max-w-2xl mx-auto min-w-0">
<div className="max-w-6xl mx-auto min-w-0">
<div className="flex flex-col gap-6">
{/* Tab navigation */}
<div className="w-full overflow-x-auto pb-1">

View file

@ -1,6 +1,7 @@
import { NextResponse } from "next/server";
import { getSettings } from "@/lib/localDb";
import { getProviderConnections, getSettings } from "@/lib/localDb";
import { APP_CONFIG } from "@/shared/constants/config";
import { AI_PROVIDERS } from "@/shared/constants/providers";
/**
* GET /api/monitoring/health System health overview
@ -16,6 +17,7 @@ export async function GET() {
const { getInflightCount } = await import("@omniroute/open-sse/services/requestDedup.ts");
const settings = await getSettings();
const connections = await getProviderConnections();
const circuitBreakers = getAllCircuitBreakerStatuses();
const rateLimitStatus = getAllRateLimitStatus();
const lockouts = getAllModelLockouts();
@ -43,11 +45,22 @@ export async function GET() {
};
}
const configuredProviders = new Set(connections.map((c: any) => c.provider));
const activeProviders = new Set(
connections.filter((c: any) => c.isActive !== false).map((c: any) => c.provider)
);
return NextResponse.json({
status: "healthy",
timestamp: new Date().toISOString(),
system,
providerHealth,
providerSummary: {
catalogCount: Object.keys(AI_PROVIDERS).length,
configuredCount: configuredProviders.size,
activeCount: activeProviders.size,
monitoredCount: Object.keys(providerHealth).length,
},
localProviders: getAllHealthStatuses(),
rateLimitStatus,
lockouts,

View file

@ -56,7 +56,9 @@
"warning": "تحذير",
"note": "ملاحظة",
"free": "مجاني",
"skipToContent": "انتقل إلى المحتوى"
"skipToContent": "انتقل إلى المحتوى",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "الصفحة الرئيسية",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "متى تستخدم",
"openToolDocs": "افتح مستندات الأداة",
"toolUseCases": {
"claude": "استخدمه عندما تريد سير عمل تخطيط قوي وعمليات إعادة بناء طويلة متعددة الملفات باستخدام Claude Code.",
"codex": "يُستخدم عندما يتم توحيد فريقك في تدفقات OpenAI Codex CLI والمصادقة المستندة إلى الملف الشخصي.",
"droid": "استخدمه عندما تحتاج إلى وكيل طرفي خفيف الوزن يركز على الترميز السريع وحلقات تنفيذ الأوامر.",
"openclaw": "استخدمه عندما تريد وكيل ترميز نمط Open Claw ولكن يتم توجيهه من خلال سياسات OmniRoute.",
"cline": "يُستخدم عندما تقوم بتكوين وكلاء الترميز داخل المحررين وتريد إعدادًا موجهًا باستخدام نماذج OmniRoute.",
"kilo": "يُستخدم عندما يعتمد سير عملك على أوامر Kilo Code والتحريرات المتكررة السريعة.",
"cursor": "استخدمه عند البرمجة في Cursor وتحتاج إلى نماذج مخصصة متوافقة مع OpenAI من خلال OmniRoute.",
"continue": "استخدمه عند تشغيل متابعة في IDEs وتحتاج إلى تكوين موفر محمول يستند إلى JSON.",
"opencode": "استخدمه عندما تفضل تشغيل الوكيل الأصلي للمحطة والأتمتة النصية عبر OpenCode.",
"kiro": "يُستخدم عند دمج Kiro والتحكم في توجيه النموذج مركزيًا من OmniRoute.",
"antigravity": "يُستخدم عندما يجب اعتراض حركة مرور Antigravity/Kiro عبر MITM وتوجيهها إلى OmniRoute.",
"copilot": "استخدمه عندما تريد UX بأسلوب دردشة Copilot أثناء فرض مفاتيح OmniRoute وقواعد التوجيه."
}
},
"combos": {
"title": "المجموعات",
@ -1087,7 +1105,13 @@
"resetAllTitle": "إعادة ضبط كافة قواطع الدائرة إلى الحالة الصحية",
"resetting": "إعادة الضبط...",
"resetAll": "إعادة ضبط الكل",
"until": "حتى {time}"
"until": "حتى {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "تم تكوينه في لوحة القيادة",
"configuredProvidersHint": "الموفرون الذين لديهم بيانات اعتماد محفوظة في /dashboard/providers، بغض النظر عن حالة وقت التشغيل.",
"activeProvidersHint": "الموفرون الذين تم تكوينهم ممكّنون حاليًا لطلبات التوجيه.",
"monitoredProvidersHint": "يتم تتبع مقدمي الخدمة حاليًا بواسطة مراقبي صحة قاطع الدائرة."
},
"limits": {
"title": "الحدود والحصص",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "الإعدادات",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "توجيه التوجيه المتقدم",
"routingAdvancedGuideHint1": "استخدمFill First للحصول على الأولوية التي يمكن التنبؤ بها، وRound Robin للعدالة، وP2C لمرونة زمن الاستجابة.",
"routingAdvancedGuideHint2": "إذا اختلف مقدمو الخدمة من حيث الجودة/التكلفة، فابدأ بـ Cost Opt للعمل في الخلفية والأقل استخدامًا للارتداء المتوازن.",
"comboDefaultsGuideTitle": "كيفية ضبط إعدادات التحرير والسرد الافتراضية",
"comboDefaultsGuideHint1": "اجعل عمليات إعادة المحاولة منخفضة في التدفقات ذات زمن الوصول المنخفض؛ زيادة المهلة فقط لمهام الجيل الطويل.",
"comboDefaultsGuideHint2": "استخدم تجاوزات الموفر عندما يحتاج أحد الموفرين إلى سلوك مهلة/إعادة محاولة مختلف عن الإعدادات الافتراضية العامة."
},
"translator": {
"title": "مترجم",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Предупреждение",
"note": "Забележка",
"free": "безплатно",
"skipToContent": "Преминете към съдържанието"
"skipToContent": "Преминете към съдържанието",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Начало",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Кога да използвате",
"openToolDocs": "Отворете документите на инструмента",
"toolUseCases": {
"claude": "Използвайте, когато искате силни работни потоци за планиране и дълги многофайлови рефактори с Claude Code.",
"codex": "Използвайте, когато вашият екип е стандартизиран на OpenAI Codex CLI потоци и базирано на профил удостоверяване.",
"droid": "Използвайте, когато имате нужда от лек терминален агент, фокусиран върху цикли за бързо кодиране и изпълнение на команди.",
"openclaw": "Използвайте, когато искате агент за кодиране в стил Open Claw, но насочен през политиките на OmniRoute.",
"cline": "Използвайте, когато конфигурирате кодиращи агенти вътре в редактори и искате насочвана настройка с OmniRoute модели.",
"kilo": "Използвайте, когато вашият работен процес зависи от команди на Kilo Code и бързи итеративни редакции.",
"cursor": "Използвайте, когато кодирате в Cursor и имате нужда от персонализирани OpenAI-съвместими модели чрез OmniRoute.",
"continue": "Използвайте, когато изпълнявате Continue в IDE и имате нужда от преносима JSON-базирана конфигурация на доставчик.",
"opencode": "Използвайте, когато предпочитате нативни за терминални агенти и скриптова автоматизация чрез OpenCode.",
"kiro": "Използвайте, когато интегрирате Kiro и контролирате маршрутизирането на модела централно от OmniRoute.",
"antigravity": "Използвайте, когато трафикът на Antigravity/Kiro трябва да бъде прихванат чрез MITM и насочен към OmniRoute.",
"copilot": "Използвайте, когато искате UX в стил на чат Copilot, като същевременно налагате OmniRoute ключове и правила за маршрутизиране."
}
},
"combos": {
"title": "Комбота",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Нулирайте всички прекъсвачи в изправно състояние",
"resetting": "Нулиране...",
"resetAll": "Нулиране на всички",
"until": "До {time}"
"until": "До {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Конфигуриран в таблото за управление",
"configuredProvidersHint": "Доставчици с идентификационни данни, записани в /dashboard/providers, независимо от състоянието на изпълнение.",
"activeProvidersHint": "Конфигурираните доставчици в момента са активирани за заявки за маршрутизиране.",
"monitoredProvidersHint": "Доставчиците в момента се проследяват от монитори за изправност на прекъсвачи."
},
"limits": {
"title": "Ограничения и квоти",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Настройки",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Разширено ръководство за маршрутизиране",
"routingAdvancedGuideHint1": "Използвайте Fill First за предвидим приоритет, Round Robin за справедливост и P2C за устойчивост на забавяне.",
"routingAdvancedGuideHint2": "Ако доставчиците се различават по отношение на качество/цена, започнете с Cost Opt за фонова работа и Least Used за балансирано износване.",
"comboDefaultsGuideTitle": "Как да настроите настройките по подразбиране на комбинацията",
"comboDefaultsGuideHint1": "Поддържайте ниски повторни опити в потоци с ниска латентност; увеличете времето за изчакване само за задачи с дълго генериране.",
"comboDefaultsGuideHint2": "Използвайте замени на доставчика, когато един доставчик се нуждае от различно поведение при изчакване/повторен опит от глобалните настройки по подразбиране."
},
"translator": {
"title": "Преводач",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Varování",
"note": "Poznámka",
"free": "Uvolnit",
"skipToContent": "Přejít na obsah"
"skipToContent": "Přejít na obsah",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Domov",
@ -364,7 +366,22 @@
"rerank": "Přeřadit",
"rerankModel": "Přeřazovací Model (Rerank)",
"positionDelta": "Změna pozice",
"emptyState": "Odešlete vyhledávací dotaz pro zobrazení výsledků"
"emptyState": "Odešlete vyhledávací dotaz pro zobrazení výsledků",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
},
"cliTools": {
"title": "CLI Nástroje",
@ -612,7 +629,23 @@
"mitmStep1": "Přejděte na stránku Správce API",
"mitmStep2Prefix": "Zadejte prefix, např. cc/",
"mitmStep2Suffix": "a cílový model jako claude-sonnet-4-20250514",
"mitmStep3": "Uložte a restartujte server"
"mitmStep3": "Uložte a restartujte server",
"whenToUseLabel": "Kdy použít",
"openToolDocs": "Otevřete dokumentaci nástroje",
"toolUseCases": {
"claude": "Použijte, když chcete silné plánovací pracovní postupy a dlouhé vícesouborové refaktory s Claude Code.",
"codex": "Použijte, když je váš tým standardizován na tocích OpenAI Codex CLI a ověřování na základě profilu.",
"droid": "Použijte, když potřebujete lehkého terminálového agenta zaměřeného na rychlé kódování a smyčky provádění příkazů.",
"openclaw": "Použijte, když chcete kódovacího agenta ve stylu Open Claw, ale směrovaného přes zásady OmniRoute.",
"cline": "Použijte, když konfigurujete kódovací agenty v editorech a chcete řízené nastavení s modely OmniRoute.",
"kilo": "Použijte, když váš pracovní postup závisí na příkazech Kilo Code a rychlých iterativních úpravách.",
"cursor": "Použijte při kódování v Cursoru a potřebujete vlastní modely kompatibilní s OpenAI prostřednictvím OmniRoute.",
"continue": "Použijte, když spouštíte Pokračovat v IDE a potřebujete přenosnou konfiguraci poskytovatele na bázi JSON.",
"opencode": "Použijte, pokud dáváte přednost spouštění nativního agenta a skriptované automatizaci prostřednictvím OpenCode.",
"kiro": "Použijte při integraci Kiro a centrálním řízení směrování modelu z OmniRoute.",
"antigravity": "Použijte, když provoz Antigravity/Kiro musí být zachycen prostřednictvím MITM a směrován do OmniRoute.",
"copilot": "Použijte, když chcete uživatelské rozhraní ve stylu chatu Copilot při vynucování klíčů OmniRoute a pravidel směrování."
}
},
"combos": {
"title": "Komba",
@ -1135,7 +1168,13 @@
"resetAllTitle": "Resetujte všechny jističe do funkčního stavu",
"resetting": "Resetování...",
"resetAll": "Obnovit vše",
"until": "Do {time}"
"until": "Do {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Nakonfigurováno v řídicím panelu",
"configuredProvidersHint": "Poskytovatelé s přihlašovacími údaji uloženými v /dashboard/providers, bez ohledu na stav běhu.",
"activeProvidersHint": "Konfigurovaní poskytovatelé aktuálně povoleni pro požadavky na směrování.",
"monitoredProvidersHint": "Poskytovatelé aktuálně sledovaní monitory stavu vypínačů."
},
"limits": {
"title": "Limity a kvóty",
@ -1494,7 +1533,14 @@
"compatProtocolHint": "Formát požadavku",
"compatProtocolOpenAI": "OpenAI",
"compatProtocolOpenAIResponses": "OpenAI Responses",
"compatProtocolClaude": "Anthropic Messages"
"compatProtocolClaude": "Anthropic Messages",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Nastavení",
@ -1897,7 +1943,13 @@
"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",
"routingAdvancedGuideTitle": "Pokročilé vedení trasy",
"routingAdvancedGuideHint1": "Použijte Fill First pro předvídatelnou prioritu, Round Robin pro spravedlnost a P2C pro odolnost vůči latenci.",
"routingAdvancedGuideHint2": "Pokud se poskytovatelé liší v kvalitě/ceně, začněte s Cost Opt pro práci na pozadí a Nejméně použité pro vyvážené opotřebení.",
"comboDefaultsGuideTitle": "Jak vyladit výchozí nastavení komba",
"comboDefaultsGuideHint1": "Udržujte počet opakování na nízké úrovni v tocích s nízkou latencí; prodlužte časový limit pouze u úloh s dlouhým generováním.",
"comboDefaultsGuideHint2": "Použít přepsání poskytovatele, když jeden poskytovatel potřebuje jiné chování časového limitu/opakování než globální výchozí hodnoty."
},
"translator": {
"title": "Překladatel",
@ -2605,7 +2657,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Kombo Engine",

View file

@ -56,7 +56,9 @@
"warning": "Advarsel",
"note": "Bemærk",
"free": "Gratis",
"skipToContent": "Gå til indhold"
"skipToContent": "Gå til indhold",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Hjem",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Hvornår skal bruges",
"openToolDocs": "Åbn værktøjsdokumenter",
"toolUseCases": {
"claude": "Brug, når du ønsker stærke planlægnings-arbejdsgange og lange multi-fil-refaktorer med Claude Code.",
"codex": "Bruges, når dit team er standardiseret på OpenAI Codex CLI-flows og profilbaseret godkendelse.",
"droid": "Brug, når du har brug for en letvægtsterminalagent med fokus på hurtig kodning og kommandoudførelsesløkker.",
"openclaw": "Brug, når du vil have en Open Claw-stil-kodningsagent, men dirigeret gennem OmniRoute-politikker.",
"cline": "Bruges, når du konfigurerer kodningsagenter i editorer og ønsker guidet opsætning med OmniRoute-modeller.",
"kilo": "Brug, når dit arbejdsflow afhænger af Kilo Code-kommandoer og hurtige iterative redigeringer.",
"cursor": "Brug, når du koder i Cursor, og du har brug for brugerdefinerede OpenAI-kompatible modeller gennem OmniRoute.",
"continue": "Brug, når du kører Continue i IDE'er, og du har brug for bærbar JSON-baseret udbyderkonfiguration.",
"opencode": "Brug, når du foretrækker terminal-native agentkørsler og scriptet automatisering via OpenCode.",
"kiro": "Bruges ved integration af Kiro og styring af modelrouting centralt fra OmniRoute.",
"antigravity": "Bruges, når Antigravity/Kiro-trafik skal opsnappes gennem MITM og dirigeres til OmniRoute.",
"copilot": "Brug, når du ønsker Copilot-chatstil UX, mens du håndhæver OmniRoute-nøgler og routingregler."
}
},
"combos": {
"title": "Combos",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Nulstil alle afbrydere til sund tilstand",
"resetting": "Nulstiller...",
"resetAll": "Nulstil alle",
"until": "Indtil {time}"
"until": "Indtil {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Konfigureret i dashboard",
"configuredProvidersHint": "Udbydere med legitimationsoplysninger gemt i /dashboard/udbydere, uanset køretidstilstand.",
"activeProvidersHint": "Konfigurerede udbydere, der i øjeblikket er aktiveret for routinganmodninger.",
"monitoredProvidersHint": "Udbydere, der i øjeblikket spores af strømafbryderens sundhedsmonitorer."
},
"limits": {
"title": "Grænser og kvoter",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Indstillinger",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Avanceret rutevejledning",
"routingAdvancedGuideHint1": "Brug Fill First for forudsigelig prioritet, Round Robin for retfærdighed og P2C for latensmodstandsdygtighed.",
"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."
},
"translator": {
"title": "Oversætter",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Warnung",
"note": "Hinweis",
"free": "Kostenlos",
"skipToContent": "Zum Inhalt springen"
"skipToContent": "Zum Inhalt springen",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Zuhause",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Wann zu verwenden",
"openToolDocs": "Tool-Dokumente öffnen",
"toolUseCases": {
"claude": "Verwenden Sie Claude Code, wenn Sie starke Planungsworkflows und lange Umgestaltungen mehrerer Dateien wünschen.",
"codex": "Verwenden Sie es, wenn Ihr Team auf OpenAI Codex CLI-Flows und profilbasierte Authentifizierung standardisiert ist.",
"droid": "Verwenden Sie ihn, wenn Sie einen kompakten Terminalagenten benötigen, der sich auf schnelle Codierung und Befehlsausführungsschleifen konzentriert.",
"openclaw": "Verwenden Sie diese Option, wenn Sie einen Codierungsagenten im Open-Claw-Stil wünschen, der jedoch über OmniRoute-Richtlinien weitergeleitet wird.",
"cline": "Verwenden Sie diese Option, wenn Sie Codierungsagenten in Editoren konfigurieren und eine geführte Einrichtung mit OmniRoute-Modellen wünschen.",
"kilo": "Verwenden Sie diese Option, wenn Ihr Arbeitsablauf auf Kilo-Code-Befehle und schnelle iterative Bearbeitungen angewiesen ist.",
"cursor": "Verwenden Sie diese Option, wenn Sie in Cursor codieren und benutzerdefinierte OpenAI-kompatible Modelle über OmniRoute benötigen.",
"continue": "Verwenden Sie diese Option, wenn Sie Continue in IDEs ausführen und eine portable JSON-basierte Anbieterkonfiguration benötigen.",
"opencode": "Verwenden Sie diese Option, wenn Sie terminalnative Agentenausführungen und Skriptautomatisierung über OpenCode bevorzugen.",
"kiro": "Zur Verwendung bei der Integration von Kiro und der zentralen Steuerung des Modellroutings über OmniRoute.",
"antigravity": "Wird verwendet, wenn Antigravity/Kiro-Verkehr über MITM abgefangen und an OmniRoute weitergeleitet werden muss.",
"copilot": "Verwenden Sie diese Option, wenn Sie eine UX im Copilot-Chat-Stil wünschen und gleichzeitig OmniRoute-Schlüssel und Routing-Regeln durchsetzen möchten."
}
},
"combos": {
"title": "Kombinationen",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Setzen Sie alle Leistungsschalter in den fehlerfreien Zustand zurück",
"resetting": "Zurücksetzen...",
"resetAll": "Alles zurücksetzen",
"until": "Bis {time}"
"until": "Bis {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Im Dashboard konfiguriert",
"configuredProvidersHint": "Anbieter mit in /dashboard/providers gespeicherten Anmeldeinformationen, unabhängig vom Laufzeitstatus.",
"activeProvidersHint": "Konfigurierte Anbieter, die derzeit für Routing-Anfragen aktiviert sind.",
"monitoredProvidersHint": "Anbieter, die derzeit von Leistungsschalter-Zustandsmonitoren überwacht werden."
},
"limits": {
"title": "Limits und Quoten",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Einstellungen",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Erweiterte Routenführung",
"routingAdvancedGuideHint1": "Verwenden Sie Fill First für vorhersehbare Priorität, Round Robin für Fairness und P2C für Latenzstabilität.",
"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."
},
"translator": {
"title": "Übersetzer",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Warning",
"note": "Note",
"free": "Free",
"skipToContent": "Skip to content"
"skipToContent": "Skip to content",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Home",
@ -354,6 +356,21 @@
"includeDomains": "Include Domains",
"excludeDomains": "Exclude Domains",
"safeSearch": "Safe Search",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error",
"formatted": "Formatted",
"rawJson": "JSON",
"cacheMiss": "cache miss",
@ -515,6 +532,22 @@
"openClawManualConfiguration": "Open Claw - Manual Configuration",
"clineManualConfiguration": "Cline Manual Configuration",
"kiloManualConfiguration": "Kilo Code Manual Configuration",
"whenToUseLabel": "When to use",
"openToolDocs": "Open tool docs",
"toolUseCases": {
"claude": "Use when you want strong planning workflows and long multi-file refactors with Claude Code.",
"codex": "Use when your team is standardized on OpenAI Codex CLI flows and profile-based auth.",
"droid": "Use when you need a lightweight terminal agent focused on fast coding and command execution loops.",
"openclaw": "Use when you want an Open Claw style coding agent but routed through OmniRoute policies.",
"cline": "Use when you configure coding agents inside editors and want guided setup with OmniRoute models.",
"kilo": "Use when your workflow depends on Kilo Code commands and fast iterative edits.",
"cursor": "Use when coding in Cursor and you need custom OpenAI-compatible models through OmniRoute.",
"continue": "Use when running Continue in IDEs and you need portable JSON-based provider configuration.",
"opencode": "Use when you prefer terminal-native agent runs and scripted automation via OpenCode.",
"kiro": "Use when integrating Kiro and controlling model routing centrally from OmniRoute.",
"antigravity": "Use when Antigravity/Kiro traffic must be intercepted through MITM and routed to OmniRoute.",
"copilot": "Use when you want Copilot chat style UX while enforcing OmniRoute keys and routing rules."
},
"toolDescriptions": {
"antigravity": "Google Antigravity IDE with MITM",
"claude": "Anthropic Claude Code CLI",
@ -1117,6 +1150,12 @@
"issuesLabel": "Issues Detected",
"operational": "Operational",
"providers": "Providers",
"configuredProvidersLabel": "Configured in dashboard",
"configuredProvidersHint": "Providers with credentials saved in /dashboard/providers, regardless of runtime state.",
"activeProviders": "{count} active",
"activeProvidersHint": "Configured providers currently enabled for routing requests.",
"monitoredProviders": "{count} monitored",
"monitoredProvidersHint": "Providers currently tracked by circuit-breaker health monitors.",
"healthyCount": "{count} healthy",
"nodeVersion": "Node {version}",
"failures": "{count} failure",
@ -1652,6 +1691,9 @@
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingStrategy": "Routing Strategy",
"routingAdvancedGuideTitle": "Advanced routing guidance",
"routingAdvancedGuideHint1": "Use Fill First for predictable priority, Round Robin for fairness, and P2C for latency resilience.",
"routingAdvancedGuideHint2": "If providers vary in quality/cost, start with Cost Opt for background work and Least Used for balanced wear.",
"fillFirst": "Fill First",
"fillFirstDesc": "Use accounts in priority order",
"roundRobin": "Round Robin",
@ -1746,6 +1788,9 @@
"fillModelAndProviders": "Please fill model name and providers",
"addAtLeastOneProvider": "Add at least one provider",
"comboDefaultsTitle": "Combo Defaults",
"comboDefaultsGuideTitle": "How to tune combo defaults",
"comboDefaultsGuideHint1": "Keep retries low in low-latency flows; increase timeout only for long generation tasks.",
"comboDefaultsGuideHint2": "Use provider overrides when one provider needs different timeout/retry behavior than global defaults.",
"globalComboConfig": "Global combo configuration",
"defaultStrategy": "Default Strategy",
"defaultStrategyDesc": "Applied to new combos without explicit strategy",
@ -2612,7 +2657,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",

View file

@ -56,7 +56,9 @@
"warning": "Advertencia",
"note": "Nota",
"free": "Gratis",
"skipToContent": "Saltar al contenido"
"skipToContent": "Saltar al contenido",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Inicio",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "cuando usar",
"openToolDocs": "Abrir documentos de herramientas",
"toolUseCases": {
"claude": "Úselo cuando desee flujos de trabajo de planificación sólidos y refactorizaciones largas de varios archivos con Claude Code.",
"codex": "Úselo cuando su equipo esté estandarizado en los flujos CLI de OpenAI Codex y la autenticación basada en perfiles.",
"droid": "Úselo cuando necesite un agente terminal liviano enfocado en codificación rápida y bucles de ejecución de comandos.",
"openclaw": "Úselo cuando desee un agente de codificación estilo Open Claw pero enrutado a través de políticas de OmniRoute.",
"cline": "Úselo cuando configure agentes de codificación dentro de editores y desee una configuración guiada con modelos OmniRoute.",
"kilo": "Úselo cuando su flujo de trabajo dependa de los comandos de Kilo Code y de ediciones iterativas rápidas.",
"cursor": "Úselo cuando codifique en Cursor y necesite modelos personalizados compatibles con OpenAI a través de OmniRoute.",
"continue": "Úselo cuando ejecute Continuar en IDE y necesite una configuración de proveedor portátil basada en JSON.",
"opencode": "Úselo cuando prefiera ejecuciones de agentes nativos de terminal y automatización con scripts a través de OpenCode.",
"kiro": "Utilícelo al integrar Kiro y controlar el enrutamiento de modelos de forma centralizada desde OmniRoute.",
"antigravity": "Úselo cuando el tráfico de Antigravity/Kiro debe interceptarse a través de MITM y enrutarse a OmniRoute.",
"copilot": "Úselo cuando desee una experiencia de usuario estilo chat Copilot mientras aplica las claves de OmniRoute y las reglas de enrutamiento."
}
},
"combos": {
"title": "combos",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Restablezca todos los disyuntores al estado saludable",
"resetting": "Restableciendo...",
"resetAll": "Restablecer todo",
"until": "Hasta {time}"
"until": "Hasta {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Configurado en el tablero",
"configuredProvidersHint": "Proveedores con credenciales guardadas en /dashboard/providers, independientemente del estado de ejecución.",
"activeProvidersHint": "Proveedores configurados actualmente habilitados para enrutar solicitudes.",
"monitoredProvidersHint": "Proveedores actualmente rastreados por monitores de estado de interruptores."
},
"limits": {
"title": "Límites y cuotas",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Configuración",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Guía de ruta avanzada",
"routingAdvancedGuideHint1": "Utilice Fill First para una prioridad predecible, Round Robin para equidad y P2C para resistencia a la latencia.",
"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."
},
"translator": {
"title": "Traductor",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Varoitus",
"note": "Huom",
"free": "Ilmainen",
"skipToContent": "Siirry sisältöön"
"skipToContent": "Siirry sisältöön",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Kotiin",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Milloin käyttää",
"openToolDocs": "Avaa työkaludokumentit",
"toolUseCases": {
"claude": "Käytä, kun haluat vahvoja suunnittelutyönkulkuja ja pitkiä monitiedostoisia refraktoreita Claude Coden avulla.",
"codex": "Käytä, kun tiimisi on standardoitu OpenAI Codex CLI -virtojen ja profiilipohjaisen todennuksen kanssa.",
"droid": "Käytä, kun tarvitset kevyen pääteagentin, joka keskittyy nopeaan koodaukseen ja komentojen suoritussilmukoihin.",
"openclaw": "Käytä, kun haluat Open Claw -tyyppisen koodausagentin, mutta reititetyn OmniRoute-käytäntöjen kautta.",
"cline": "Käytä, kun määrität koodausagentteja editorien sisällä ja haluat ohjatun asennuksen OmniRoute-malleilla.",
"kilo": "Käytä, kun työnkulkusi riippuu Kilo Code -komennoista ja nopeista iteratiivisista muokkauksista.",
"cursor": "Käytä koodattaessa Cursorissa ja tarvitset mukautettuja OpenAI-yhteensopivia malleja OmniRouten kautta.",
"continue": "Käytä, kun käytät Continuea IDE:issä ja tarvitset kannettavan JSON-pohjaisen palveluntarjoajan määrityksen.",
"opencode": "Käytä, kun haluat käyttää päätealustaisia agentteja ja komentosarjottua automaatiota OpenCoden kautta.",
"kiro": "Käytä integroitaessa Kiroa ja ohjattaessa mallin reititystä keskitetysti OmniRoutesta.",
"antigravity": "Käytä, kun Antigravity/Kiro-liikenne on siepattava MITM:n kautta ja ohjattava OmniRouteen.",
"copilot": "Käytä, kun haluat Copilot-chat-tyylisen UX:n ja pakota OmniRoute-avaimia ja reitityssääntöjä."
}
},
"combos": {
"title": "Yhdistelmät",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Palauta kaikki katkaisijat terveeseen tilaan",
"resetting": "Nollataan...",
"resetAll": "Nollaa kaikki",
"until": "{time} asti"
"until": "{time} asti",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Konfiguroitu kojelaudassa",
"configuredProvidersHint": "Palveluntarjoajat, joiden valtuustiedot on tallennettu kansioon /dashboard/providers, suorituksen tilasta riippumatta.",
"activeProvidersHint": "Määritetyt palveluntarjoajat, jotka ovat tällä hetkellä käytössä reitityspyyntöjä varten.",
"monitoredProvidersHint": "Palveluntarjoajat, joita tällä hetkellä seurataan katkaisijoiden kuntovalvojien avulla."
},
"limits": {
"title": "Rajoitukset ja kiintiöt",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Asetukset",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Edistynyt reititysopastus",
"routingAdvancedGuideHint1": "Käytä Täytä ensin ennustettavaa prioriteettia varten, Round Robinia oikeudenmukaisuuden varmistamiseksi ja P2C:tä latenssin kestävyyteen.",
"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."
},
"translator": {
"title": "Kääntäjä",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Avertissement",
"note": "Remarque",
"free": "Gratuit",
"skipToContent": "Passer au contenu"
"skipToContent": "Passer au contenu",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Accueil",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Quand utiliser",
"openToolDocs": "Ouvrir la documentation de l'outil",
"toolUseCases": {
"claude": "À utiliser lorsque vous souhaitez des flux de travail de planification solides et de longs refactors multi-fichiers avec Claude Code.",
"codex": "À utiliser lorsque votre équipe est standardisée sur les flux CLI OpenAI Codex et l'authentification basée sur le profil.",
"droid": "À utiliser lorsque vous avez besoin d'un agent de terminal léger axé sur des boucles de codage et d'exécution de commandes rapides.",
"openclaw": "À utiliser lorsque vous souhaitez un agent de codage de style Open Claw mais acheminé via des stratégies OmniRoute.",
"cline": "À utiliser lorsque vous configurez des agents de codage dans des éditeurs et que vous souhaitez une configuration guidée avec des modèles OmniRoute.",
"kilo": "À utiliser lorsque votre flux de travail dépend des commandes Kilo Code et de modifications itératives rapides.",
"cursor": "À utiliser lors du codage dans Cursor et vous avez besoin de modèles personnalisés compatibles OpenAI via OmniRoute.",
"continue": "À utiliser lors de l'exécution de Continue dans les IDE et que vous avez besoin d'une configuration de fournisseur portable basée sur JSON.",
"opencode": "À utiliser lorsque vous préférez les exécutions d'agents natifs du terminal et l'automatisation par script via OpenCode.",
"kiro": "À utiliser lors de l'intégration de Kiro et du contrôle centralisé du routage de modèles à partir d'OmniRoute.",
"antigravity": "À utiliser lorsque le trafic Antigravity/Kiro doit être intercepté via MITM et acheminé vers OmniRoute.",
"copilot": "À utiliser lorsque vous souhaitez une UX de style chat Copilot tout en appliquant les clés OmniRoute et les règles de routage."
}
},
"combos": {
"title": "Combinaisons",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Réinitialisez tous les disjoncteurs à létat sain",
"resetting": "Réinitialisation...",
"resetAll": "Tout réinitialiser",
"until": "Jusqu'au {time}"
"until": "Jusqu'au {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Configuré dans le tableau de bord",
"configuredProvidersHint": "Fournisseurs dont les informations didentification sont enregistrées dans /dashboard/providers, quel que soit létat dexécution.",
"activeProvidersHint": "Fournisseurs configurés actuellement activés pour les demandes de routage.",
"monitoredProvidersHint": "Fournisseurs actuellement suivis par des moniteurs de santé des disjoncteurs."
},
"limits": {
"title": "Limites et quotas",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Paramètres",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Guidage d'itinéraire avancé",
"routingAdvancedGuideHint1": "Utilisez Fill First pour une priorité prévisible, Round Robin pour léquité et P2C pour la résilience en matière de latence.",
"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."
},
"translator": {
"title": "Traducteur",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "אזהרה",
"note": "הערה",
"free": "חינם",
"skipToContent": "דלג לתוכן"
"skipToContent": "דלג לתוכן",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "בית",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "מתי להשתמש",
"openToolDocs": "פתח את מסמכי הכלים",
"toolUseCases": {
"claude": "השתמש כאשר אתה רוצה זרימות עבודה תכנון חזקות וריפקטורים ארוכים מרובי קבצים עם Claude Code.",
"codex": "השתמש כאשר הצוות שלך סטנדרטי על זרימות OpenAI Codex CLI ואימות מבוסס פרופיל.",
"droid": "השתמש כאשר אתה צריך סוכן מסוף קל משקל המתמקד בלולאות קידוד מהיר וביצוע פקודות.",
"openclaw": "השתמש כאשר אתה רוצה סוכן קידוד בסגנון Open Claw אך מנותב דרך מדיניות OmniRoute.",
"cline": "השתמש כאשר אתה מגדיר סוכני קידוד בתוך עורכים ורוצה הגדרה מודרכת עם דגמי OmniRoute.",
"kilo": "השתמש כאשר זרימת העבודה שלך תלויה בפקודות Kilo Code ועריכות איטרטיביות מהירות.",
"cursor": "השתמש בעת קידוד בסמן ואתה צריך מודלים מותאמים אישית תואמי OpenAI דרך OmniRoute.",
"continue": "השתמש בעת הפעלת Continue ב-IDEs ואתה זקוק לתצורת ספק ניידת מבוססת JSON.",
"opencode": "השתמש כאשר אתה מעדיף ריצות סוכנים מקוריים ומאוטומציה של סקריפטים באמצעות OpenCode.",
"kiro": "השתמש בעת שילוב Kiro ושליטה בניתוב מודלים באופן מרכזי מ- OmniRoute.",
"antigravity": "השתמש כאשר יש ליירט תעבורת Antigravity/Kiro דרך MITM ולנתב אל OmniRoute.",
"copilot": "השתמש כאשר אתה רוצה UX בסגנון צ'אט Copilot תוך אכיפת מפתחות וכללי ניתוב OmniRoute."
}
},
"combos": {
"title": "שילובים",
@ -1087,7 +1105,13 @@
"resetAllTitle": "אפס את כל המפסקים למצב תקין",
"resetting": "מאפס...",
"resetAll": "אפס הכל",
"until": "עד {time}"
"until": "עד {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "מוגדר בלוח המחוונים",
"configuredProvidersHint": "ספקים עם אישורים שנשמרו ב-/dashboard/ספקים, ללא קשר למצב זמן הריצה.",
"activeProvidersHint": "ספקים מוגדרים מופעלים כעת עבור בקשות ניתוב.",
"monitoredProvidersHint": "ספקים שנמצאים כעת במעקב על-ידי מסכי תקינות מפסקים."
},
"limits": {
"title": "מגבלות ומכסות",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "הגדרות",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "הנחיית ניתוב מתקדמת",
"routingAdvancedGuideHint1": "השתמש ב-Fill First לקבלת עדיפות צפויה, ב-Round Robin להגינות, וב-P2C עבור חוסן חביון.",
"routingAdvancedGuideHint2": "אם הספקים משתנים באיכות/עלות, התחל עם Cost Opt עבור עבודת רקע והפחות בשימוש עבור בלאי מאוזן.",
"comboDefaultsGuideTitle": "כיצד לכוונן ברירות מחדל משולבות",
"comboDefaultsGuideHint1": "שמור על ניסיונות חוזרים נמוכים בזרימות עם אחזור נמוך; להגדיל את הזמן הקצוב רק עבור משימות דור ארוך.",
"comboDefaultsGuideHint2": "השתמש בעקיפות ספק כאשר ספק אחד זקוק להתנהגות שונה של זמן קצוב/ניסיון חוזר מאשר ברירות מחדל גלובליות."
},
"translator": {
"title": "מתרגם",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Figyelmeztetés",
"note": "Megjegyzés",
"free": "Ingyenes",
"skipToContent": "Ugrás a tartalomhoz"
"skipToContent": "Ugrás a tartalomhoz",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Otthon",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Mikor kell használni",
"openToolDocs": "Nyissa meg az eszközdokumentumokat",
"toolUseCases": {
"claude": "Használja, ha erős tervezési munkafolyamatokat és hosszú, több fájlból álló refaktorokat szeretne a Claude Code segítségével.",
"codex": "Akkor használja, ha csapata szabványosítva van az OpenAI Codex CLI-folyamatokon és a profilalapú hitelesítésen.",
"droid": "Használja, ha egy könnyű terminálügynökre van szüksége, amely a gyors kódolásra és parancsvégrehajtási ciklusokra összpontosít.",
"openclaw": "Akkor használja, ha Open Claw stílusú kódoló ügynököt szeretne, de az OmniRoute házirendeken keresztül irányítja.",
"cline": "Akkor használja, ha kódoló ügynököket konfigurál a szerkesztőkön belül, és irányított beállítást szeretne az OmniRoute modellekkel.",
"kilo": "Akkor használja, ha a munkafolyamat a Kilo Code parancsoktól és a gyors iteratív szerkesztésektől függ.",
"cursor": "Használja a Kurzorban való kódoláshoz, és egyéni OpenAI-kompatibilis modellekre van szüksége az OmniRoute-on keresztül.",
"continue": "Használja a Continue futtatásakor az IDE-ben, és hordozható JSON-alapú szolgáltatói konfigurációra van szüksége.",
"opencode": "Akkor használja, ha a terminál-natív ügynökfuttatásokat és az OpenCode-on keresztüli parancsfájl-automatizálást részesíti előnyben.",
"kiro": "Használja a Kiro integrálásához és a modell-útválasztás központi vezérléséhez az OmniRoute-ból.",
"antigravity": "Akkor használja, ha az Antigravity/Kiro forgalmat MITM-en keresztül kell elfogni, és az OmniRoute-hoz kell irányítani.",
"copilot": "Használja, ha másodpilóta csevegési stílusú UX-et szeretne, miközben betartja az OmniRoute kulcsokat és útválasztási szabályokat."
}
},
"combos": {
"title": "Kombók",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Állítsa vissza az összes megszakítót egészséges állapotba",
"resetting": "Visszaállítás...",
"resetAll": "Összes visszaállítása",
"until": "{time}-ig"
"until": "{time}-ig",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "A műszerfalon konfigurálva",
"configuredProvidersHint": "A /dashboard/providers mappába mentett hitelesítő adatokkal rendelkező szolgáltatók, a futásidejű állapottól függetlenül.",
"activeProvidersHint": "Konfigurált szolgáltatók, amelyek jelenleg engedélyezve vannak az útválasztási kérelmek számára.",
"monitoredProvidersHint": "Azok a szolgáltatók, amelyeket jelenleg a megszakítók állapotfigyelői követnek nyomon."
},
"limits": {
"title": "Korlátok és kvóták",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Beállítások elemre",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Speciális útbaigazítás",
"routingAdvancedGuideHint1": "Használja a Fill First funkciót a kiszámítható prioritáshoz, a Round Robint a méltányossághoz és a P2C-t a késleltetési rugalmassághoz.",
"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."
},
"translator": {
"title": "Fordító",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Peringatan",
"note": "Catatan",
"free": "Gratis",
"skipToContent": "Lewati ke konten"
"skipToContent": "Lewati ke konten",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Rumah",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Kapan harus digunakan",
"openToolDocs": "Buka dokumen alat",
"toolUseCases": {
"claude": "Gunakan saat Anda menginginkan alur kerja perencanaan yang kuat dan pemfaktoran ulang multi-file yang panjang dengan Claude Code.",
"codex": "Gunakan saat tim Anda terstandarisasi pada alur OpenAI Codex CLI dan autentikasi berbasis profil.",
"droid": "Gunakan saat Anda membutuhkan agen terminal ringan yang berfokus pada pengkodean cepat dan loop eksekusi perintah.",
"openclaw": "Gunakan saat Anda menginginkan agen pengkodean gaya Open Claw tetapi dirutekan melalui kebijakan OmniRoute.",
"cline": "Gunakan saat Anda mengonfigurasi agen pengkodean di dalam editor dan ingin penyiapan terpandu dengan model OmniRoute.",
"kilo": "Gunakan ketika alur kerja Anda bergantung pada perintah Kode Kilo dan pengeditan berulang yang cepat.",
"cursor": "Gunakan saat membuat kode di Cursor dan Anda memerlukan model khusus yang kompatibel dengan OpenAI melalui OmniRoute.",
"continue": "Gunakan saat menjalankan Lanjutkan di IDE dan Anda memerlukan konfigurasi penyedia portabel berbasis JSON.",
"opencode": "Gunakan saat Anda lebih suka menjalankan agen terminal-asli dan otomatisasi skrip melalui OpenCode.",
"kiro": "Gunakan saat mengintegrasikan Kiro dan mengontrol perutean model secara terpusat dari OmniRoute.",
"antigravity": "Gunakan ketika lalu lintas Antigravitasi/Kiro harus dicegat melalui MITM dan dialihkan ke OmniRoute.",
"copilot": "Gunakan saat Anda menginginkan UX gaya obrolan kopilot sambil menerapkan kunci OmniRoute dan aturan perutean."
}
},
"combos": {
"title": "kombo",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Setel ulang semua pemutus sirkuit ke kondisi sehat",
"resetting": "Menyetel ulang...",
"resetAll": "Atur Ulang Semua",
"until": "Sampai {time}"
"until": "Sampai {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Dikonfigurasi di dasbor",
"configuredProvidersHint": "Penyedia dengan kredensial yang disimpan di /dashboard/providers, apa pun status runtimenya.",
"activeProvidersHint": "Penyedia yang dikonfigurasi saat ini diaktifkan untuk permintaan perutean.",
"monitoredProvidersHint": "Penyedia saat ini dilacak oleh monitor kesehatan pemutus sirkuit."
},
"limits": {
"title": "Batas & Kuota",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Pengaturan",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Panduan perutean tingkat lanjut",
"routingAdvancedGuideHint1": "Gunakan Fill First untuk prioritas yang dapat diprediksi, Round Robin untuk keadilan, dan P2C untuk ketahanan latensi.",
"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."
},
"translator": {
"title": "Penerjemah",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "चेतावनी",
"note": "नोट",
"free": "निःशुल्क",
"skipToContent": "सामग्री पर जाएं"
"skipToContent": "सामग्री पर जाएं",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "घर",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "कब उपयोग करें",
"openToolDocs": "टूल दस्तावेज़ खोलें",
"toolUseCases": {
"claude": "जब आप क्लाउड कोड के साथ मजबूत नियोजन वर्कफ़्लो और लंबे मल्टी-फ़ाइल रिफैक्टर चाहते हों तो इसका उपयोग करें।",
"codex": "जब आपकी टीम OpenAI कोडेक्स CLI प्रवाह और प्रोफ़ाइल-आधारित प्रमाणीकरण पर मानकीकृत हो तो इसका उपयोग करें।",
"droid": "जब आपको तेज़ कोडिंग और कमांड निष्पादन लूप पर केंद्रित हल्के टर्मिनल एजेंट की आवश्यकता हो तो इसका उपयोग करें।",
"openclaw": "जब आप ओपन क्लॉ स्टाइल कोडिंग एजेंट चाहते हैं लेकिन ओमनीरूट नीतियों के माध्यम से रूट किया जाता है तो इसका उपयोग करें।",
"cline": "जब आप संपादकों के अंदर कोडिंग एजेंटों को कॉन्फ़िगर करते हैं और ओमनीरूट मॉडल के साथ निर्देशित सेटअप चाहते हैं तो इसका उपयोग करें।",
"kilo": "इसका उपयोग तब करें जब आपका वर्कफ़्लो किलो कोड कमांड और तेज़ पुनरावृत्त संपादन पर निर्भर हो।",
"cursor": "कर्सर में कोडिंग करते समय उपयोग करें और आपको ओमनीरूट के माध्यम से कस्टम ओपनएआई-संगत मॉडल की आवश्यकता है।",
"continue": "IDE में जारी रखें चलाते समय उपयोग करें और आपको पोर्टेबल JSON-आधारित प्रदाता कॉन्फ़िगरेशन की आवश्यकता है।",
"opencode": "जब आप ओपनकोड के माध्यम से टर्मिनल-नेटिव एजेंट रन और स्क्रिप्टेड ऑटोमेशन पसंद करते हैं तो इसका उपयोग करें।",
"kiro": "किरो को एकीकृत करते समय और ओमनीरूट से केंद्रीय रूप से मॉडल रूटिंग को नियंत्रित करते समय उपयोग करें।",
"antigravity": "इसका उपयोग तब करें जब एंटीग्रेविटी/किरो ट्रैफिक को एमआईटीएम के माध्यम से रोका जाना चाहिए और ओमनीरूट पर भेजा जाना चाहिए।",
"copilot": "जब आप ओम्निरूट कुंजी और रूटिंग नियमों को लागू करते समय कोपायलट चैट शैली यूएक्स चाहते हैं तो इसका उपयोग करें।"
}
},
"combos": {
"title": "संयोजन",
@ -1087,7 +1105,13 @@
"resetAllTitle": "सभी सर्किट ब्रेकरों को स्वस्थ स्थिति में रीसेट करें",
"resetting": "रीसेट किया जा रहा है...",
"resetAll": "सभी रीसेट करें",
"until": "{time} तक"
"until": "{time} तक",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "डैशबोर्ड में कॉन्फ़िगर किया गया",
"configuredProvidersHint": "रनटाइम स्थिति की परवाह किए बिना, /डैशबोर्ड/प्रदाताओं में सहेजे गए क्रेडेंशियल वाले प्रदाता।",
"activeProvidersHint": "कॉन्फ़िगर किए गए प्रदाता वर्तमान में रूटिंग अनुरोधों के लिए सक्षम हैं।",
"monitoredProvidersHint": "प्रदाताओं को वर्तमान में सर्किट-ब्रेकर स्वास्थ्य मॉनिटर द्वारा ट्रैक किया जाता है।"
},
"limits": {
"title": "सीमाएँ और कोटा",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "सेटिंग्स",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "उन्नत रूटिंग मार्गदर्शन",
"routingAdvancedGuideHint1": "पूर्वानुमानित प्राथमिकता के लिए फ़िल फ़र्स्ट का उपयोग करें, निष्पक्षता के लिए राउंड रॉबिन और विलंबता लचीलेपन के लिए P2C का उपयोग करें।",
"routingAdvancedGuideHint2": "यदि प्रदाता गुणवत्ता/लागत में भिन्न हैं, तो पृष्ठभूमि कार्य के लिए कॉस्ट ऑप्ट और संतुलित पहनावे के लिए कम से कम उपयोग से शुरुआत करें।",
"comboDefaultsGuideTitle": "कॉम्बो डिफॉल्ट्स को कैसे ट्यून करें",
"comboDefaultsGuideHint1": "कम-विलंबता प्रवाह में पुनः प्रयास कम रखें; केवल लंबी पीढ़ी के कार्यों के लिए टाइमआउट बढ़ाएँ।",
"comboDefaultsGuideHint2": "जब एक प्रदाता को वैश्विक डिफ़ॉल्ट की तुलना में अलग टाइमआउट/पुनः प्रयास व्यवहार की आवश्यकता होती है तो प्रदाता ओवरराइड का उपयोग करें।"
},
"translator": {
"title": "अनुवादक",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Avvertimento",
"note": "Nota",
"free": "Gratuito",
"skipToContent": "Vai al contenuto"
"skipToContent": "Vai al contenuto",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Casa",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Quando usarlo",
"openToolDocs": "Apri i documenti dello strumento",
"toolUseCases": {
"claude": "Utilizzalo quando desideri flussi di lavoro di pianificazione avanzati e lunghi refactoring multi-file con Claude Code.",
"codex": "Da utilizzare quando il tuo team è standardizzato sui flussi CLI di OpenAI Codex e sull'autenticazione basata sul profilo.",
"droid": "Da utilizzare quando è necessario un agente terminale leggero incentrato sulla codifica rapida e sui cicli di esecuzione dei comandi.",
"openclaw": "Da utilizzare quando si desidera un agente di codifica in stile Open Claw ma instradato tramite policy OmniRoute.",
"cline": "Da utilizzare quando si configurano agenti di codifica all'interno degli editor e si desidera un'impostazione guidata con i modelli OmniRoute.",
"kilo": "Da utilizzare quando il flusso di lavoro dipende dai comandi Kilo Code e da modifiche iterative rapide.",
"cursor": "Da utilizzare durante la codifica in Cursor e sono necessari modelli personalizzati compatibili con OpenAI tramite OmniRoute.",
"continue": "Da utilizzare quando si esegue Continue negli IDE ed è necessaria la configurazione portatile del provider basato su JSON.",
"opencode": "Utilizzalo quando preferisci l'esecuzione dell'agente nativo del terminale e l'automazione basata su script tramite OpenCode.",
"kiro": "Da utilizzare quando si integra Kiro e si controlla l'instradamento del modello centralmente da OmniRoute.",
"antigravity": "Da utilizzare quando il traffico Antigravity/Kiro deve essere intercettato tramite MITM e instradato a OmniRoute.",
"copilot": "Utilizzalo quando desideri un'esperienza utente in stile chat Copilot applicando al tempo stesso le chiavi OmniRoute e le regole di routing."
}
},
"combos": {
"title": "Combinazioni",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Ripristinare tutti gli interruttori automatici allo stato integro",
"resetting": "Reimpostazione...",
"resetAll": "Reimposta tutto",
"until": "Fino al {time}"
"until": "Fino al {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Configurato nel dashboard",
"configuredProvidersHint": "Provider con credenziali salvate in /dashboard/providers, indipendentemente dallo stato di runtime.",
"activeProvidersHint": "Provider configurati attualmente abilitati per le richieste di instradamento.",
"monitoredProvidersHint": "Fornitori attualmente monitorati dai monitoraggi dello stato degli interruttori automatici."
},
"limits": {
"title": "Limiti e quote",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Impostazioni",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Guida al percorso avanzata",
"routingAdvancedGuideHint1": "Utilizza Fill First per una priorità prevedibile, Round Robin per l'equità e P2C per la resilienza alla latenza.",
"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."
},
"translator": {
"title": "Traduttore",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "警告",
"note": "注記",
"free": "無料",
"skipToContent": "コンテンツにスキップ"
"skipToContent": "コンテンツにスキップ",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "ホーム",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "いつ使用するか",
"openToolDocs": "ツールドキュメントを開く",
"toolUseCases": {
"claude": "クロード コードを使用して強力な計画ワークフローと長い複数ファイルのリファクタリングが必要な場合に使用します。",
"codex": "チームが OpenAI Codex CLI フローとプロファイルベースの認証で標準化されている場合に使用します。",
"droid": "高速コーディングとコマンド実行ループに重点を置いた軽量のターミナル エージェントが必要な場合に使用します。",
"openclaw": "Open Claw スタイルのコーディング エージェントが必要だが、OmniRoute ポリシーを通じてルーティングされる場合に使用します。",
"cline": "エディター内でコーディング エージェントを構成し、OmniRoute モデルを使用したガイド付きセットアップが必要な場合に使用します。",
"kilo": "ワークフローが Kilo Code コマンドと高速反復編集に依存している場合に使用します。",
"cursor": "Cursor でコーディングし、OmniRoute を介してカスタム OpenAI 互換モデルが必要な場合に使用します。",
"continue": "IDE で続行を実行し、移植可能な JSON ベースのプロバイダー構成が必要な場合に使用します。",
"opencode": "ターミナルネイティブのエージェントの実行と OpenCode によるスクリプトによる自動化を希望する場合に使用します。",
"kiro": "Kiro を統合し、OmniRoute からモデルのルーティングを一元的に制御する場合に使用します。",
"antigravity": "Antigravity/Kiro トラフィックを MITM 経由でインターセプトし、OmniRoute にルーティングする必要がある場合に使用します。",
"copilot": "OmniRoute キーとルーティング ルールを適用しながら、Copilot チャット スタイルの UX が必要な場合に使用します。"
}
},
"combos": {
"title": "コンボ",
@ -1087,7 +1105,13 @@
"resetAllTitle": "すべてのサーキットブレーカーを正常な状態にリセットします",
"resetting": "リセット中...",
"resetAll": "すべてリセット",
"until": "{time} まで"
"until": "{time} まで",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "ダッシュボードで設定",
"configuredProvidersHint": "実行時の状態に関係なく、認証情報を持つプロバイダーは /dashboard/providers に保存されます。",
"activeProvidersHint": "リクエストのルーティングが現在有効になっている構成済みプロバイダー。",
"monitoredProvidersHint": "現在、プロバイダーはサーキット ブレーカー ヘルス モニターによって追跡されています。"
},
"limits": {
"title": "制限と割り当て",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "設定",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "高度なルーティング ガイダンス",
"routingAdvancedGuideHint1": "予測可能な優先度を得るには Fill First を使用し、公平性を得るにはラウンド ロビンを、レイテンシの回復力を得るには P2C を使用します。",
"routingAdvancedGuideHint2": "プロバイダーによって品質/コストが異なる場合は、バックグラウンド作業についてはコスト最適化から開始し、バランスのとれた摩耗については最も使用されないようにします。",
"comboDefaultsGuideTitle": "コンボのデフォルトを調整する方法",
"comboDefaultsGuideHint1": "低遅延フローでは再試行を低く抑えます。長い世代のタスクの場合にのみタイムアウトを増やします。",
"comboDefaultsGuideHint2": "1 つのプロバイダーがグローバルなデフォルトとは異なるタイムアウト/再試行動作を必要とする場合は、プロバイダー オーバーライドを使用します。"
},
"translator": {
"title": "翻訳者",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "경고",
"note": "참고",
"free": "무료",
"skipToContent": "콘텐츠로 건너뛰기"
"skipToContent": "콘텐츠로 건너뛰기",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "홈",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "언제 사용하나요?",
"openToolDocs": "도구 문서 열기",
"toolUseCases": {
"claude": "Claude Code를 사용하여 강력한 계획 워크플로와 긴 다중 파일 리팩터링을 원할 때 사용하세요.",
"codex": "팀이 OpenAI Codex CLI 흐름 및 프로필 기반 인증으로 표준화된 경우에 사용하세요.",
"droid": "빠른 코딩 및 명령 실행 루프에 초점을 맞춘 경량 터미널 에이전트가 필요할 때 사용하세요.",
"openclaw": "Open Claw 스타일 코딩 에이전트를 원하지만 OmniRoute 정책을 통해 라우팅되는 경우에 사용합니다.",
"cline": "편집기 내에서 코딩 에이전트를 구성하고 OmniRoute 모델을 사용하여 안내 설정을 원하는 경우 사용합니다.",
"kilo": "작업 흐름이 Kilo Code 명령과 빠른 반복 편집에 의존하는 경우에 사용하세요.",
"cursor": "Cursor에서 코딩할 때 사용하고 OmniRoute를 통해 사용자 정의 OpenAI 호환 모델이 필요합니다.",
"continue": "IDE에서 계속을 실행할 때 사용하고 이식 가능한 JSON 기반 공급자 구성이 필요합니다.",
"opencode": "OpenCode를 통해 터미널 기반 에이전트 실행 및 스크립트 자동화를 선호할 때 사용하세요.",
"kiro": "Kiro를 통합하고 OmniRoute에서 중앙에서 모델 라우팅을 제어할 때 사용합니다.",
"antigravity": "Antigravity/Kiro 트래픽이 MITM을 통해 가로채어 OmniRoute로 라우팅되어야 하는 경우에 사용합니다.",
"copilot": "OmniRoute 키와 라우팅 규칙을 적용하면서 Copilot 채팅 스타일 UX를 원할 때 사용하세요."
}
},
"combos": {
"title": "콤보",
@ -1087,7 +1105,13 @@
"resetAllTitle": "모든 회로 차단기를 정상 상태로 재설정",
"resetting": "재설정 중...",
"resetAll": "모두 재설정",
"until": "{time}까지"
"until": "{time}까지",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "대시보드에 구성됨",
"configuredProvidersHint": "런타임 상태에 관계없이 /dashboard/providers에 자격 증명이 저장된 공급자입니다.",
"activeProvidersHint": "현재 요청 라우팅을 위해 활성화된 구성된 공급자입니다.",
"monitoredProvidersHint": "현재 회로 차단기 상태 모니터로 추적되는 공급자입니다."
},
"limits": {
"title": "한도 및 할당량",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "설정",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "고급 경로 안내",
"routingAdvancedGuideHint1": "예측 가능한 우선순위를 위해서는 Fill First를 사용하고, 공정성을 위해서는 Round Robin을, 지연 시간 복원력을 위해서는 P2C를 사용하세요.",
"routingAdvancedGuideHint2": "서비스 제공업체의 품질/비용이 다양한 경우 백그라운드 작업에는 비용 선택(Cost Opt)으로 시작하고 균형 잡힌 착용에는 최소 사용(Least Used)으로 시작하세요.",
"comboDefaultsGuideTitle": "콤보 기본값을 조정하는 방법",
"comboDefaultsGuideHint1": "지연 시간이 짧은 흐름에서는 재시도 횟수를 낮게 유지하세요. 긴 세대 작업에 대해서만 시간 제한을 늘립니다.",
"comboDefaultsGuideHint2": "하나의 공급자가 전역 기본값과 다른 시간 초과/재시도 동작을 필요로 하는 경우 공급자 재정의를 사용합니다."
},
"translator": {
"title": "번역기",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Amaran",
"note": "Nota",
"free": "Percuma",
"skipToContent": "Langkau ke kandungan"
"skipToContent": "Langkau ke kandungan",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Rumah",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Bila nak guna",
"openToolDocs": "Buka dokumen alat",
"toolUseCases": {
"claude": "Gunakan apabila anda mahukan aliran kerja perancangan yang kukuh dan refactor berbilang fail panjang dengan Kod Claude.",
"codex": "Gunakan apabila pasukan anda diseragamkan pada aliran OpenAI Codex CLI dan pengesahan berasaskan profil.",
"droid": "Gunakan apabila anda memerlukan ejen terminal ringan yang menumpukan pada pengekodan pantas dan gelung pelaksanaan perintah.",
"openclaw": "Gunakan apabila anda mahukan ejen pengekodan gaya Open Claw tetapi dihalakan melalui dasar OmniRoute.",
"cline": "Gunakan apabila anda mengkonfigurasi ejen pengekodan dalam editor dan mahukan persediaan berpandu dengan model OmniRoute.",
"kilo": "Gunakan apabila aliran kerja anda bergantung pada arahan Kilo Code dan pengeditan berulang yang pantas.",
"cursor": "Gunakan semasa pengekodan dalam Kursor dan anda memerlukan model serasi OpenAI tersuai melalui OmniRoute.",
"continue": "Gunakan semasa menjalankan Teruskan dalam IDE dan anda memerlukan konfigurasi pembekal berasaskan JSON mudah alih.",
"opencode": "Gunakan apabila anda lebih suka ejen terminal-native run dan automasi skrip melalui OpenCode.",
"kiro": "Gunakan apabila menyepadukan Kiro dan mengawal penghalaan model secara berpusat daripada OmniRoute.",
"antigravity": "Gunakan apabila trafik Antigraviti/Kiro mesti dipintas melalui MITM dan dihalakan ke OmniRoute.",
"copilot": "Gunakan apabila anda mahu Copilot gaya sembang UX sambil menguatkuasakan kekunci OmniRoute dan peraturan penghalaan."
}
},
"combos": {
"title": "Kombo",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Tetapkan semula semua pemutus litar kepada keadaan sihat",
"resetting": "Menetapkan semula...",
"resetAll": "Tetapkan Semula Semua",
"until": "Sehingga {time}"
"until": "Sehingga {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Dikonfigurasikan dalam papan pemuka",
"configuredProvidersHint": "Pembekal dengan bukti kelayakan disimpan dalam /papan pemuka/penyedia, tanpa mengira keadaan masa jalan.",
"activeProvidersHint": "Penyedia yang dikonfigurasikan pada masa ini didayakan untuk permintaan penghalaan.",
"monitoredProvidersHint": "Pembekal kini dijejaki oleh pemantau kesihatan pemutus litar."
},
"limits": {
"title": "Had & Kuota",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "tetapan",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Panduan laluan lanjutan",
"routingAdvancedGuideHint1": "Gunakan Fill First untuk keutamaan yang boleh diramal, Round Robin untuk keadilan dan P2C untuk daya tahan latensi.",
"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."
},
"translator": {
"title": "Penterjemah",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Waarschuwing",
"note": "Let op",
"free": "Gratis",
"skipToContent": "Ga naar de inhoud"
"skipToContent": "Ga naar de inhoud",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Thuis",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Wanneer te gebruiken",
"openToolDocs": "Gereedschapsdocumentatie openen",
"toolUseCases": {
"claude": "Gebruik deze optie als u krachtige planningsworkflows en lange refactoren van meerdere bestanden wilt met Claude Code.",
"codex": "Gebruik wanneer uw team is gestandaardiseerd op OpenAI Codex CLI-stromen en op profielen gebaseerde authenticatie.",
"droid": "Gebruik deze wanneer u een lichtgewicht terminalagent nodig heeft die zich richt op snelle codering en opdrachtuitvoeringslussen.",
"openclaw": "Gebruik dit wanneer u een codeeragent in Open Claw-stijl wilt, maar gerouteerd via OmniRoute-beleid.",
"cline": "Gebruik deze optie wanneer u codeeragenten in editors configureert en begeleide installatie wilt met OmniRoute-modellen.",
"kilo": "Gebruik dit wanneer uw workflow afhankelijk is van Kilo Code-opdrachten en snelle iteratieve bewerkingen.",
"cursor": "Gebruik dit bij het coderen in Cursor en u hebt aangepaste OpenAI-compatibele modellen nodig via OmniRoute.",
"continue": "Gebruik dit wanneer u Doorgaan in IDE's uitvoert en u een draagbare, op JSON gebaseerde providerconfiguratie nodig hebt.",
"opencode": "Gebruik dit wanneer u de voorkeur geeft aan terminal-native agentruns en scriptautomatisering via OpenCode.",
"kiro": "Te gebruiken bij het integreren van Kiro en het centraal beheren van modelrouting vanuit OmniRoute.",
"antigravity": "Gebruik wanneer Antigravity/Kiro-verkeer moet worden onderschept via MITM en naar OmniRoute moet worden gerouteerd.",
"copilot": "Gebruik wanneer u UX in Copilot-chatstijl wilt terwijl u OmniRoute-sleutels en routeringsregels afdwingt."
}
},
"combos": {
"title": "Combo's",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Reset alle stroomonderbrekers naar de gezonde status",
"resetting": "Resetten...",
"resetAll": "Alles resetten",
"until": "Tot {time}"
"until": "Tot {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Geconfigureerd in dashboard",
"configuredProvidersHint": "Providers met inloggegevens opgeslagen in /dashboard/providers, ongeacht de runtimestatus.",
"activeProvidersHint": "Geconfigureerde providers die momenteel zijn ingeschakeld voor het routeren van verzoeken.",
"monitoredProvidersHint": "Providers worden momenteel gevolgd door gezondheidsmonitors van stroomonderbrekers."
},
"limits": {
"title": "Limieten en quota's",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Instellingen",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Geavanceerde routebegeleiding",
"routingAdvancedGuideHint1": "Gebruik Fill First voor voorspelbare prioriteit, Round Robin voor eerlijkheid en P2C voor latency-veerkracht.",
"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."
},
"translator": {
"title": "Vertaler",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Advarsel",
"note": "Merk",
"free": "Gratis",
"skipToContent": "Gå til innhold"
"skipToContent": "Gå til innhold",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Hjem",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Når du skal bruke",
"openToolDocs": "Åpne verktøydokumenter",
"toolUseCases": {
"claude": "Bruk når du vil ha sterke planleggingsarbeidsflyter og lange multifilrefaktorer med Claude Code.",
"codex": "Bruk når teamet ditt er standardisert på OpenAI Codex CLI-flyter og profilbasert autentisering.",
"droid": "Bruk når du trenger en lettvekts terminalagent fokusert på rask koding og løkker for kommandoutførelse.",
"openclaw": "Bruk når du vil ha en Open Claw-kodingsagent, men rutet gjennom OmniRoute-policyer.",
"cline": "Bruk når du konfigurerer kodeagenter inne i redaktører og ønsker veiledet oppsett med OmniRoute-modeller.",
"kilo": "Bruk når arbeidsflyten din avhenger av Kilo Code-kommandoer og raske iterative redigeringer.",
"cursor": "Bruk når du koder i Cursor og du trenger tilpassede OpenAI-kompatible modeller gjennom OmniRoute.",
"continue": "Bruk når du kjører Continue i IDEer og du trenger bærbar JSON-basert leverandørkonfigurasjon.",
"opencode": "Bruk når du foretrekker terminal-native agentkjøringer og skriptautomatisering via OpenCode.",
"kiro": "Brukes når du integrerer Kiro og kontrollerer modellruting sentralt fra OmniRoute.",
"antigravity": "Brukes når Antigravity/Kiro-trafikk må avskjæres gjennom MITM og rutes til OmniRoute.",
"copilot": "Bruk når du vil ha Copilot chat-stil UX mens du håndhever OmniRoute-nøkler og rutingsregler."
}
},
"combos": {
"title": "Combos",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Tilbakestill alle effektbrytere til sunn tilstand",
"resetting": "Tilbakestiller...",
"resetAll": "Tilbakestill alle",
"until": "Inntil {time}"
"until": "Inntil {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Konfigurert i dashbordet",
"configuredProvidersHint": "Leverandører med legitimasjon lagret i /dashboard/leverandører, uavhengig av kjøretidstilstand.",
"activeProvidersHint": "Konfigurerte leverandører er for øyeblikket aktivert for rutingforespørsler.",
"monitoredProvidersHint": "Leverandører spores for øyeblikket av strømbryterhelsemonitorer."
},
"limits": {
"title": "Grenser og kvoter",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Innstillinger",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Avansert ruteveiledning",
"routingAdvancedGuideHint1": "Bruk Fill First for forutsigbar prioritet, Round Robin for rettferdighet og P2C for latensmotstandskraft.",
"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."
},
"translator": {
"title": "Oversetter",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Babala",
"note": "Tandaan",
"free": "Libre",
"skipToContent": "Lumaktaw sa nilalaman"
"skipToContent": "Lumaktaw sa nilalaman",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Bahay",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Kailan gagamitin",
"openToolDocs": "Buksan ang tool docs",
"toolUseCases": {
"claude": "Gamitin kapag gusto mo ng matibay na mga daloy ng trabaho sa pagpaplano at mahabang multi-file refactor na may Claude Code.",
"codex": "Gamitin kapag ang iyong koponan ay na-standardize sa mga daloy ng OpenAI Codex CLI at profile-based na auth.",
"droid": "Gamitin kapag kailangan mo ng lightweight na terminal agent na nakatuon sa mabilis na coding at command execution loops.",
"openclaw": "Gamitin kapag gusto mo ng Open Claw style coding agent ngunit naruta sa pamamagitan ng mga patakaran ng OmniRoute.",
"cline": "Gamitin kapag nag-configure ka ng mga ahente ng coding sa loob ng mga editor at gusto mo ng may gabay na pag-setup gamit ang mga modelong OmniRoute.",
"kilo": "Gamitin kapag nakadepende ang iyong daloy ng trabaho sa mga command ng Kilo Code at mabilis na umuulit na pag-edit.",
"cursor": "Gamitin kapag nagko-coding sa Cursor at kailangan mo ng mga custom na modelong katugma sa OpenAI sa pamamagitan ng OmniRoute.",
"continue": "Gamitin kapag nagpapatakbo ng Magpatuloy sa mga IDE at kailangan mo ng portable JSON-based na configuration ng provider.",
"opencode": "Gamitin kapag mas gusto mo ang terminal-native agent run at scripted automation sa pamamagitan ng OpenCode.",
"kiro": "Gamitin kapag isinasama ang Kiro at kinokontrol ang pagruruta ng modelo sa gitna mula sa OmniRoute.",
"antigravity": "Gamitin kapag ang trapiko ng Antigravity/Kiro ay dapat ma-intercept sa MITM at iruta sa OmniRoute.",
"copilot": "Gamitin kapag gusto mong Copilot chat style UX habang ipinapatupad ang mga OmniRoute key at mga panuntunan sa pagruruta."
}
},
"combos": {
"title": "Mga combo",
@ -1087,7 +1105,13 @@
"resetAllTitle": "I-reset ang lahat ng mga circuit breaker sa malusog na estado",
"resetting": "Nire-reset...",
"resetAll": "I-reset Lahat",
"until": "Hanggang {time}"
"until": "Hanggang {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Na-configure sa dashboard",
"configuredProvidersHint": "Mga provider na may mga kredensyal na naka-save sa /dashboard/providers, anuman ang estado ng runtime.",
"activeProvidersHint": "Kasalukuyang pinagana ang mga naka-configure na provider para sa mga kahilingan sa pagruruta.",
"monitoredProvidersHint": "Ang mga provider ay kasalukuyang sinusubaybayan ng mga circuit-breaker na monitor ng kalusugan."
},
"limits": {
"title": "Mga Limitasyon at Quota",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Mga setting",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Gabay sa advanced na pagruruta",
"routingAdvancedGuideHint1": "Gamitin ang Fill First para sa predictable priority, Round Robin para sa fairness, at P2C para sa latency resilience.",
"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."
},
"translator": {
"title": "Tagasalin",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Ostrzeżenie",
"note": "Uwaga",
"free": "Bezpłatny",
"skipToContent": "Przejdź do treści"
"skipToContent": "Przejdź do treści",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Dom",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Kiedy używać",
"openToolDocs": "Otwórz dokumentację narzędzi",
"toolUseCases": {
"claude": "Użyj, jeśli chcesz mieć silne przepływy pracy związane z planowaniem i długie refaktoryzacje wielu plików za pomocą Claude Code.",
"codex": "Użyj, gdy Twój zespół jest ujednolicony w zakresie przepływów CLI OpenAI Codex i uwierzytelniania opartego na profilach.",
"droid": "Użyj, gdy potrzebujesz lekkiego agenta terminalowego skupionego na szybkim kodowaniu i pętlach wykonywania poleceń.",
"openclaw": "Użyj, jeśli chcesz agenta kodującego w stylu Open Claw, ale kierowanego przez zasady OmniRoute.",
"cline": "Użyj, gdy konfigurujesz agentów kodujących w edytorach i chcesz przeprowadzić konfigurację z pomocą modeli OmniRoute.",
"kilo": "Użyj, gdy przepływ pracy zależy od poleceń Kilo Code i szybkich edycji iteracyjnych.",
"cursor": "Użyj podczas kodowania w programie Cursor, jeśli potrzebujesz niestandardowych modeli zgodnych z OpenAI za pośrednictwem OmniRoute.",
"continue": "Użyj podczas uruchamiania Kontynuuj w środowiskach IDE, jeśli potrzebujesz przenośnej konfiguracji dostawcy opartej na formacie JSON.",
"opencode": "Użyj, jeśli wolisz uruchamianie agentów natywnych w terminalu i automatyzację skryptów za pośrednictwem OpenCode.",
"kiro": "Użyj podczas integracji Kiro i centralnego sterowania routingiem modeli z OmniRoute.",
"antigravity": "Użyj, gdy ruch antygrawitacyjny/Kiro musi zostać przechwycony przez MITM i skierowany do OmniRoute.",
"copilot": "Użyj, jeśli chcesz mieć UX w stylu czatu Copilot, jednocześnie wymuszając klucze OmniRoute i reguły routingu."
}
},
"combos": {
"title": "Kombinacje",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Zresetuj wszystkie wyłączniki automatyczne do stanu prawidłowego",
"resetting": "Resetuję...",
"resetAll": "Zresetuj wszystko",
"until": "Do {time}"
"until": "Do {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Skonfigurowane w panelu kontrolnym",
"configuredProvidersHint": "Dostawcy z poświadczeniami zapisanymi w /dashboard/providers, niezależnie od stanu środowiska wykonawczego.",
"activeProvidersHint": "Skonfigurowani dostawcy aktualnie obsługują żądania routingu.",
"monitoredProvidersHint": "Dostawcy są obecnie śledzeni przez monitory stanu wyłączników."
},
"limits": {
"title": "Limity i kwoty",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Ustawienia",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Zaawansowane wskazówki dotyczące tras",
"routingAdvancedGuideHint1": "Użyj opcji Fill First, aby uzyskać przewidywalny priorytet, Round Robin, aby zapewnić uczciwość, i P2C, aby zapewnić odporność na opóźnienia.",
"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."
},
"translator": {
"title": "Tłumacz",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Aviso",
"note": "Nota",
"free": "Gratuito",
"skipToContent": "Pular para conteúdo"
"skipToContent": "Pular para conteúdo",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Início",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Quando usar",
"openToolDocs": "Abrir documentos de ferramentas",
"toolUseCases": {
"claude": "Use quando desejar fluxos de trabalho de planejamento robustos e refatorações longas de vários arquivos com Claude Code.",
"codex": "Use quando sua equipe estiver padronizada em fluxos OpenAI Codex CLI e autenticação baseada em perfil.",
"droid": "Use quando precisar de um agente de terminal leve focado em codificação rápida e loops de execução de comandos.",
"openclaw": "Use quando desejar um agente de codificação no estilo Open Claw, mas roteado por meio de políticas OmniRoute.",
"cline": "Use quando você configura agentes de codificação dentro de editores e deseja configuração guiada com modelos OmniRoute.",
"kilo": "Use quando seu fluxo de trabalho depender de comandos Kilo Code e edições iterativas rápidas.",
"cursor": "Use ao codificar no Cursor e você precisar de modelos personalizados compatíveis com OpenAI por meio do OmniRoute.",
"continue": "Use ao executar Continue em IDEs e você precisar de uma configuração de provedor portátil baseada em JSON.",
"opencode": "Use quando preferir execuções de agentes nativos de terminal e automação com script via OpenCode.",
"kiro": "Use ao integrar o Kiro e controlar o roteamento do modelo centralmente no OmniRoute.",
"antigravity": "Use quando o tráfego Antigravity/Kiro deve ser interceptado através do MITM e roteado para OmniRoute.",
"copilot": "Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento."
}
},
"combos": {
"title": "Combos",
@ -1099,7 +1117,13 @@
"resetAllTitle": "Resetar todos os circuit breakers para estado saudável",
"resetting": "Resetando...",
"resetAll": "Resetar Tudo",
"until": "Até {time}"
"until": "Até {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Configurado no painel",
"configuredProvidersHint": "Provedores com credenciais salvas em /dashboard/providers, independentemente do estado do tempo de execução.",
"activeProvidersHint": "Provedores configurados atualmente habilitados para solicitações de roteamento.",
"monitoredProvidersHint": "Provedores atualmente monitorados por monitores de integridade dos disjuntores."
},
"limits": {
"title": "Limites e Cotas",
@ -1458,7 +1482,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Configurações",
@ -1861,7 +1892,13 @@
"customPricingNote": "Você pode sobrescrever preços padrão para modelos específicos. Sobrescritas personalizadas têm prioridade sobre preços detectados automaticamente.",
"editPricing": "Editar Preços",
"viewFullDetails": "Ver Detalhes Completos",
"themeCoral": "Coral"
"themeCoral": "Coral",
"routingAdvancedGuideTitle": "Orientação avançada de roteamento",
"routingAdvancedGuideHint1": "Use Fill First para prioridade previsível, Round Robin para justiça e P2C para resiliência de latência.",
"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."
},
"translator": {
"title": "Tradutor",
@ -2581,7 +2618,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2640,6 +2685,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Aviso",
"note": "Nota",
"free": "Grátis",
"skipToContent": "Pular para o conteúdo"
"skipToContent": "Pular para o conteúdo",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Página inicial",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Quando usar",
"openToolDocs": "Abrir documentos de ferramentas",
"toolUseCases": {
"claude": "Use quando desejar fluxos de trabalho de planejamento robustos e refatorações longas de vários arquivos com Claude Code.",
"codex": "Use quando sua equipe estiver padronizada em fluxos OpenAI Codex CLI e autenticação baseada em perfil.",
"droid": "Use quando precisar de um agente de terminal leve focado em codificação rápida e loops de execução de comandos.",
"openclaw": "Use quando desejar um agente de codificação no estilo Open Claw, mas roteado por meio de políticas OmniRoute.",
"cline": "Use quando você configura agentes de codificação dentro de editores e deseja configuração guiada com modelos OmniRoute.",
"kilo": "Use quando seu fluxo de trabalho depender de comandos Kilo Code e edições iterativas rápidas.",
"cursor": "Use ao codificar no Cursor e você precisar de modelos personalizados compatíveis com OpenAI por meio do OmniRoute.",
"continue": "Use ao executar Continue em IDEs e você precisar de uma configuração de provedor portátil baseada em JSON.",
"opencode": "Use quando preferir execuções de agentes nativos de terminal e automação com script via OpenCode.",
"kiro": "Use ao integrar o Kiro e controlar o roteamento do modelo centralmente no OmniRoute.",
"antigravity": "Use quando o tráfego Antigravity/Kiro deve ser interceptado através do MITM e roteado para OmniRoute.",
"copilot": "Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento."
}
},
"combos": {
"title": "Combos",
@ -1099,7 +1117,13 @@
"resetAllTitle": "Reinicialize todos os disjuntores para um estado saudável",
"resetting": "Redefinindo...",
"resetAll": "Redefinir tudo",
"until": "Até {time}"
"until": "Até {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Configurado no painel",
"configuredProvidersHint": "Provedores com credenciais salvas em /dashboard/providers, independentemente do estado do tempo de execução.",
"activeProvidersHint": "Provedores configurados atualmente habilitados para solicitações de roteamento.",
"monitoredProvidersHint": "Provedores atualmente monitorados por monitores de integridade dos disjuntores."
},
"limits": {
"title": "Limites e cotas",
@ -1458,7 +1482,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Configurações",
@ -1861,7 +1892,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Orientação avançada de roteamento",
"routingAdvancedGuideHint1": "Use Fill First para prioridade previsível, Round Robin para justiça e P2C para resiliência de latência.",
"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."
},
"translator": {
"title": "Tradutor",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Avertisment",
"note": "Notă",
"free": "Gratuit",
"skipToContent": "Treci la conținut"
"skipToContent": "Treci la conținut",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Acasă",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Când să utilizați",
"openToolDocs": "Deschideți documentele instrumentului",
"toolUseCases": {
"claude": "Utilizați atunci când doriți fluxuri de lucru puternice de planificare și refactorări lungi cu mai multe fișiere cu Claude Code.",
"codex": "Utilizați atunci când echipa dvs. este standardizată pe fluxurile OpenAI Codex CLI și pe autentificarea bazată pe profil.",
"droid": "Utilizați atunci când aveți nevoie de un agent terminal ușor, concentrat pe codificarea rapidă și buclele de execuție a comenzilor.",
"openclaw": "Utilizați atunci când doriți un agent de codare în stil Open Claw, dar direcționat prin politicile OmniRoute.",
"cline": "Utilizați atunci când configurați agenți de codare în cadrul editorilor și doriți o configurare ghidată cu modelele OmniRoute.",
"kilo": "Utilizați atunci când fluxul dvs. de lucru depinde de comenzile Kilo Code și de editările iterative rapide.",
"cursor": "Utilizați când codați în Cursor și aveți nevoie de modele personalizate compatibile cu OpenAI prin OmniRoute.",
"continue": "Utilizați atunci când rulați Continue în IDE-uri și aveți nevoie de o configurație portabilă a furnizorului bazată pe JSON.",
"opencode": "Utilizați atunci când preferați rulările de agent nativ terminal și automatizarea prin script prin OpenCode.",
"kiro": "Utilizați atunci când integrați Kiro și controlați rutarea modelului central din OmniRoute.",
"antigravity": "Utilizați atunci când traficul Antigravity/Kiro trebuie interceptat prin MITM și direcționat către OmniRoute.",
"copilot": "Utilizați atunci când doriți UX în stilul de chat Copilot, în timp ce aplicați cheile și regulile de rutare OmniRoute."
}
},
"combos": {
"title": "Combo-uri",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Resetați toate întreruptoarele la starea sănătoasă",
"resetting": "Se resetează...",
"resetAll": "Resetați toate",
"until": "Până la {time}"
"until": "Până la {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Configurat în tabloul de bord",
"configuredProvidersHint": "Furnizorii cu acreditări salvate în /dashboard/providers, indiferent de starea de rulare.",
"activeProvidersHint": "Furnizorii configurați activați în prezent pentru solicitările de rutare.",
"monitoredProvidersHint": "Furnizorii sunt urmăriți în prezent de monitoarele de sănătate ale întreruptoarelor."
},
"limits": {
"title": "Limite și cote",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Setări",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Ghid avansat de rutare",
"routingAdvancedGuideHint1": "Folosiți Fill First pentru o prioritate previzibilă, Round Robin pentru corectitudine și P2C pentru rezistență la latență.",
"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."
},
"translator": {
"title": "Traducător",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Предупреждение",
"note": "Примечание",
"free": "Бесплатно",
"skipToContent": "Перейти к содержимому"
"skipToContent": "Перейти к содержимому",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Главная",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Когда использовать",
"openToolDocs": "Открыть документацию по инструменту",
"toolUseCases": {
"claude": "Используйте, если вам нужны надежные рабочие процессы планирования и длительные рефакторинги нескольких файлов с помощью Claude Code.",
"codex": "Используйте, когда ваша команда стандартизирует потоки интерфейса командной строки OpenAI Codex и аутентификацию на основе профилей.",
"droid": "Используйте, когда вам нужен легкий агент терминала, ориентированный на быстрое кодирование и циклы выполнения команд.",
"openclaw": "Используйте, если вам нужен агент кодирования в стиле Open Claw, но маршрутизируемый через политики OmniRoute.",
"cline": "Используйте, если вы настраиваете агенты кодирования внутри редакторов и хотите выполнить управляемую настройку с помощью моделей OmniRoute.",
"kilo": "Используйте, когда ваш рабочий процесс зависит от команд Kilo Code и быстрого итеративного редактирования.",
"cursor": "Используйте при кодировании в Cursor, если вам нужны пользовательские модели, совместимые с OpenAI, через OmniRoute.",
"continue": "Используйте при запуске Продолжить в IDE, если вам нужна переносимая конфигурация поставщика на основе JSON.",
"opencode": "Используйте, если вы предпочитаете запускать собственные агенты терминала и автоматизировать скрипты через OpenCode.",
"kiro": "Используйте при интеграции Kiro и централизованном управлении маршрутизацией модели из OmniRoute.",
"antigravity": "Используйте, когда трафик Антигравитации/Киро необходимо перехватить через MITM и направить в OmniRoute.",
"copilot": "Используйте его, если вам нужен пользовательский интерфейс в стиле чата Copilot, одновременно обеспечивая соблюдение ключей OmniRoute и правил маршрутизации."
}
},
"combos": {
"title": "Комбо",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Верните все автоматические выключатели в исправное состояние.",
"resetting": "Сброс...",
"resetAll": "Сбросить все",
"until": "До {time}"
"until": "До {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Настраивается в приборной панели",
"configuredProvidersHint": "Поставщики, учетные данные которых сохранены в /dashboard/providers, независимо от состояния времени выполнения.",
"activeProvidersHint": "Настроенные поставщики в настоящее время включены для маршрутизации запросов.",
"monitoredProvidersHint": "Поставщики услуг в настоящее время отслеживаются с помощью мониторов состояния автоматических выключателей."
},
"limits": {
"title": "Лимиты и квоты",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Настройки",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Расширенное руководство по маршрутизации",
"routingAdvancedGuideHint1": "Используйте «Fill First» для предсказуемого приоритета, Round Robin для обеспечения справедливости и P2C для устойчивости к задержкам.",
"routingAdvancedGuideHint2": "Если поставщики различаются по качеству/стоимости, начните с варианта «Стоимость» для фоновой работы и «Наименее используемый» для сбалансированного износа.",
"comboDefaultsGuideTitle": "Как настроить комбо по умолчанию",
"comboDefaultsGuideHint1": "Сохраняйте низкий уровень повторных попыток в потоках с малой задержкой; увеличивайте таймаут только для задач длинной генерации.",
"comboDefaultsGuideHint2": "Используйте переопределения поставщика, если одному поставщику требуется другое поведение по тайм-ауту/повторной попытке, чем глобальные значения по умолчанию."
},
"translator": {
"title": "Переводчик",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Upozornenie",
"note": "Poznámka",
"free": "Zadarmo",
"skipToContent": "Preskočiť na obsah"
"skipToContent": "Preskočiť na obsah",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Domov",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Kedy použiť",
"openToolDocs": "Otvorte dokumentáciu nástroja",
"toolUseCases": {
"claude": "Použite, keď chcete silné plánovacie pracovné postupy a dlhé viacsúborové refaktory s Claude Code.",
"codex": "Použite, keď je váš tím štandardizovaný na tokoch OpenAI Codex CLI a autentifikácii založenej na profile.",
"droid": "Použite, keď potrebujete ľahkého terminálového agenta zameraného na rýchle kódovanie a slučky vykonávania príkazov.",
"openclaw": "Použite, keď chcete kódovacieho agenta v štýle Open Claw, ale smerovaného cez zásady OmniRoute.",
"cline": "Použite, keď konfigurujete kódovacích agentov v editoroch a chcete riadiť nastavenie s modelmi OmniRoute.",
"kilo": "Použite, keď váš pracovný postup závisí od príkazov Kilo Code a rýchlych iteračných úprav.",
"cursor": "Použite pri kódovaní v Cursore a potrebujete vlastné modely kompatibilné s OpenAI cez OmniRoute.",
"continue": "Použite pri spustení Continue in IDE a potrebujete prenosnú konfiguráciu poskytovateľa založenú na JSON.",
"opencode": "Použite, ak uprednostňujete spúšťanie natívneho agenta a skriptovanú automatizáciu cez OpenCode.",
"kiro": "Použite pri integrácii Kiro a centrálnom riadení smerovania modelu z OmniRoute.",
"antigravity": "Použite, keď musí byť premávka Antigravity/Kiro zachytená cez MITM a nasmerovaná na OmniRoute.",
"copilot": "Použite, keď chcete UX v štýle chatu Copilot pri presadzovaní kľúčov OmniRoute a pravidiel smerovania."
}
},
"combos": {
"title": "kombá",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Resetujte všetky ističe do zdravého stavu",
"resetting": "Resetovanie...",
"resetAll": "Obnoviť všetko",
"until": "Do {time}"
"until": "Do {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Nakonfigurované na ovládacom paneli",
"configuredProvidersHint": "Poskytovatelia s povereniami uloženými v /dashboard/providers, bez ohľadu na stav runtime.",
"activeProvidersHint": "Konfigurovaní poskytovatelia majú momentálne povolené požiadavky na smerovanie.",
"monitoredProvidersHint": "Poskytovatelia v súčasnosti sledovaní monitormi zdravia ističov."
},
"limits": {
"title": "Limity a kvóty",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Nastavenia",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Pokročilé vedenie trasy",
"routingAdvancedGuideHint1": "Použite Fill First pre predvídateľnú prioritu, Round Robin pre spravodlivosť a P2C pre odolnosť latencie.",
"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."
},
"translator": {
"title": "Prekladateľ",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Varning",
"note": "Obs",
"free": "Gratis",
"skipToContent": "Hoppa till innehållet"
"skipToContent": "Hoppa till innehållet",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Hem",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "När du ska använda",
"openToolDocs": "Öppna verktygsdokument",
"toolUseCases": {
"claude": "Använd när du vill ha starka planeringsarbetsflöden och långa flerfilsrefaktorer med Claude Code.",
"codex": "Använd när ditt team är standardiserat på OpenAI Codex CLI-flöden och profilbaserad autentisering.",
"droid": "Använd när du behöver en lätt terminalagent fokuserad på snabb kodning och kommandokörningsloopar.",
"openclaw": "Använd när du vill ha en Open Claw-kodningsagent men dirigerad genom OmniRoute-policyer.",
"cline": "Använd när du konfigurerar kodningsagenter i redigerare och vill ha guidad installation med OmniRoute-modeller.",
"kilo": "Använd när ditt arbetsflöde beror på Kilo Code-kommandon och snabba iterativa redigeringar.",
"cursor": "Använd när du kodar i Cursor och du behöver anpassade OpenAI-kompatibla modeller genom OmniRoute.",
"continue": "Använd när du kör Continue i IDE och du behöver portabel JSON-baserad leverantörskonfiguration.",
"opencode": "Använd när du föredrar terminalbaserade agentkörningar och skriptautomation via OpenCode.",
"kiro": "Använd när du integrerar Kiro och styr modelldirigering centralt från OmniRoute.",
"antigravity": "Använd när Antigravity/Kiro-trafik måste avlyssnas genom MITM och dirigeras till OmniRoute.",
"copilot": "Använd när du vill ha Copilot chattstil UX samtidigt som du upprätthåller OmniRoute-nycklar och routingregler."
}
},
"combos": {
"title": "Combos",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Återställ alla strömbrytare till friskt tillstånd",
"resetting": "Återställer...",
"resetAll": "Återställ alla",
"until": "Tills {time}"
"until": "Tills {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Konfigurerad i instrumentpanelen",
"configuredProvidersHint": "Leverantörer med autentiseringsuppgifter sparade i /dashboard/providers, oavsett körtidstillstånd.",
"activeProvidersHint": "Konfigurerade leverantörer som för närvarande är aktiverade för routingförfrågningar.",
"monitoredProvidersHint": "Leverantörer spåras för närvarande av strömbrytare hälsoövervakare."
},
"limits": {
"title": "Gränser och kvoter",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Inställningar",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Avancerad vägledning",
"routingAdvancedGuideHint1": "Använd Fill First för förutsägbar prioritet, Round Robin för rättvisa och P2C för latensförmåga.",
"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."
},
"translator": {
"title": "Översättare",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "คำเตือน",
"note": "หมายเหตุ",
"free": "ฟรี",
"skipToContent": "ข้ามไปที่เนื้อหา"
"skipToContent": "ข้ามไปที่เนื้อหา",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "บ้าน",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "เมื่อจะใช้",
"openToolDocs": "เปิดเอกสารเครื่องมือ",
"toolUseCases": {
"claude": "ใช้เมื่อคุณต้องการเวิร์กโฟลว์การวางแผนที่แข็งแกร่งและรีแฟคเตอร์หลายไฟล์แบบยาวด้วย Claude Code",
"codex": "ใช้เมื่อทีมของคุณได้รับมาตรฐานในโฟลว์ OpenAI Codex CLI และการตรวจสอบสิทธิ์ตามโปรไฟล์",
"droid": "ใช้เมื่อคุณต้องการเอเจนต์เทอร์มินัลน้ำหนักเบาที่เน้นไปที่การเขียนโค้ดที่รวดเร็วและลูปการดำเนินการคำสั่ง",
"openclaw": "ใช้เมื่อคุณต้องการเอเจนต์การเข้ารหัสสไตล์ Open Claw แต่กำหนดเส้นทางผ่านนโยบาย OmniRoute",
"cline": "ใช้เมื่อคุณกำหนดค่าเอเจนต์การเขียนโค้ดภายในโปรแกรมแก้ไข และต้องการการตั้งค่าที่แนะนำด้วยโมเดล OmniRoute",
"kilo": "ใช้เมื่อเวิร์กโฟลว์ของคุณขึ้นอยู่กับคำสั่ง Kilo Code และการแก้ไขซ้ำอย่างรวดเร็ว",
"cursor": "ใช้เมื่อเขียนโค้ดในเคอร์เซอร์และคุณต้องการโมเดลที่เข้ากันได้กับ OpenAI แบบกำหนดเองผ่าน OmniRoute",
"continue": "ใช้เมื่อเรียกใช้ดำเนินการต่อใน IDE และคุณต้องกำหนดค่าผู้ให้บริการที่ใช้ JSON แบบพกพา",
"opencode": "ใช้เมื่อคุณต้องการเรียกใช้ Terminal-Native Agent และใช้สคริปต์อัตโนมัติผ่าน OpenCode",
"kiro": "ใช้เมื่อรวม Kiro และควบคุมการกำหนดเส้นทางโมเดลจากส่วนกลางจาก OmniRoute",
"antigravity": "ใช้เมื่อต้องสกัดกั้นการรับส่งข้อมูล Antigravity/Kiro ผ่าน MITM และกำหนดเส้นทางไปยัง OmniRoute",
"copilot": "ใช้เมื่อคุณต้องการ UX รูปแบบการแชทของ Copilot ในขณะที่บังคับใช้คีย์ OmniRoute และกฎการกำหนดเส้นทาง"
}
},
"combos": {
"title": "คอมโบ",
@ -1087,7 +1105,13 @@
"resetAllTitle": "รีเซ็ตเบรกเกอร์วงจรทั้งหมดให้อยู่ในสถานะปกติ",
"resetting": "กำลังรีเซ็ต...",
"resetAll": "รีเซ็ตทั้งหมด",
"until": "จนถึง {time}"
"until": "จนถึง {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "กำหนดค่าในแดชบอร์ด",
"configuredProvidersHint": "ผู้ให้บริการที่มีข้อมูลรับรองบันทึกไว้ใน /dashboard/providers โดยไม่คำนึงถึงสถานะรันไทม์",
"activeProvidersHint": "ผู้ให้บริการที่กำหนดค่าไว้เปิดใช้งานอยู่สำหรับการร้องขอการกำหนดเส้นทาง",
"monitoredProvidersHint": "ผู้ให้บริการในปัจจุบันได้รับการติดตามโดยเครื่องตรวจสุขภาพของเซอร์กิตเบรกเกอร์"
},
"limits": {
"title": "ขีดจำกัดและโควต้า",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "การตั้งค่า",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "คำแนะนำการกำหนดเส้นทางขั้นสูง",
"routingAdvancedGuideHint1": "ใช้ Fill First เพื่อลำดับความสำคัญที่คาดการณ์ได้ Round Robin เพื่อความยุติธรรม และ P2C เพื่อความยืดหยุ่นในการตอบสนอง",
"routingAdvancedGuideHint2": "หากผู้ให้บริการมีคุณภาพ/ต้นทุนแตกต่างกัน ให้เริ่มด้วยการเลือกต้นทุนสำหรับงานเบื้องหลังและใช้งานน้อยที่สุดสำหรับการสึกหรอที่สมดุล",
"comboDefaultsGuideTitle": "วิธีปรับแต่งค่าเริ่มต้นคอมโบ",
"comboDefaultsGuideHint1": "พยายามลองใหม่ให้ต่ำในกระแสเวลาแฝงต่ำ เพิ่มการหมดเวลาเฉพาะสำหรับงานที่ใช้เวลานานเท่านั้น",
"comboDefaultsGuideHint2": "ใช้การแทนที่ผู้ให้บริการเมื่อผู้ให้บริการรายหนึ่งต้องการพฤติกรรมการหมดเวลา/การลองใหม่ที่แตกต่างไปจากค่าเริ่มต้นส่วนกลาง"
},
"translator": {
"title": "นักแปล",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Попередження",
"note": "Примітка",
"free": "безкоштовно",
"skipToContent": "Перейти до вмісту"
"skipToContent": "Перейти до вмісту",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "додому",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Коли використовувати",
"openToolDocs": "Відкрийте документацію інструмента",
"toolUseCases": {
"claude": "Використовуйте, коли вам потрібні потужні робочі процеси планування та довгі багатофайлові рефактори з Claude Code.",
"codex": "Використовуйте, коли ваша команда стандартизована на потоках OpenAI Codex CLI та автентифікації на основі профілю.",
"droid": "Використовуйте, коли вам потрібен легкий термінальний агент, зосереджений на швидкому кодуванні та циклах виконання команд.",
"openclaw": "Використовуйте, якщо вам потрібен агент кодування у стилі Open Claw, але маршрутизується через політики OmniRoute.",
"cline": "Використовуйте, коли ви налаштовуєте агенти кодування в редакторах і бажаєте кероване налаштування за допомогою моделей OmniRoute.",
"kilo": "Використовуйте, коли ваш робочий процес залежить від команд Kilo Code та швидких ітеративних редагувань.",
"cursor": "Використовуйте під час кодування в Cursor, і вам потрібні власні моделі, сумісні з OpenAI через OmniRoute.",
"continue": "Використовуйте під час запуску Продовжити в IDE і вам потрібна портативна конфігурація постачальника на основі JSON.",
"opencode": "Використовуйте, якщо ви віддаєте перевагу запуску агента на терміналі та автоматизації за сценарієм через OpenCode.",
"kiro": "Використовуйте під час інтеграції Kiro та централізованого керування маршрутизацією моделі з OmniRoute.",
"antigravity": "Використовуйте, коли трафік Antigravity/Kiro потрібно перехопити через MITM і направити на OmniRoute.",
"copilot": "Використовуйте, коли вам потрібен UX у стилі чату Copilot із застосуванням ключів OmniRoute і правил маршрутизації."
}
},
"combos": {
"title": "Комбо",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Скиньте всі автоматичні вимикачі в справний стан",
"resetting": "Скидання...",
"resetAll": "Скинути все",
"until": "До {time}"
"until": "До {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Налаштовано на інформаційній панелі",
"configuredProvidersHint": "Постачальники з обліковими даними, збереженими в /dashboard/providers, незалежно від стану виконання.",
"activeProvidersHint": "Налаштовані постачальники наразі ввімкнено для запитів маршрутизації.",
"monitoredProvidersHint": "Постачальники наразі відстежуються моніторами справності автоматичних вимикачів."
},
"limits": {
"title": "Ліміти та квоти",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Налаштування",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Розширені вказівки щодо маршрутизації",
"routingAdvancedGuideHint1": "Використовуйте Fill First для передбачуваного пріоритету, Round Robin для справедливості та P2C для стійкості до затримок.",
"routingAdvancedGuideHint2": "Якщо постачальники відрізняються за якістю/вартістю, почніть із Cost Opt для фонової роботи та Least Used для збалансованого зносу.",
"comboDefaultsGuideTitle": "Як налаштувати параметри комбо за замовчуванням",
"comboDefaultsGuideHint1": "Зберігайте низькі повторні спроби в потоках із низькою затримкою; збільшити час очікування лише для завдань тривалого покоління.",
"comboDefaultsGuideHint2": "Використовуйте перевизначення постачальника, коли одному постачальнику потрібна інша поведінка тайм-ауту/повторної спроби, ніж глобальні стандартні налаштування."
},
"translator": {
"title": "Перекладач",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "Cảnh báo",
"note": "Lưu ý",
"free": "miễn phí",
"skipToContent": "Chuyển đến nội dung"
"skipToContent": "Chuyển đến nội dung",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "Trang chủ",
@ -576,7 +578,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "Khi nào nên sử dụng",
"openToolDocs": "Mở tài liệu công cụ",
"toolUseCases": {
"claude": "Sử dụng khi bạn muốn quy trình lập kế hoạch mạnh mẽ và các trình tái cấu trúc nhiều tệp dài với Mã Claude.",
"codex": "Sử dụng khi nhóm của bạn được chuẩn hóa trên các luồng OpenAI Codex CLI và xác thực dựa trên hồ sơ.",
"droid": "Sử dụng khi bạn cần một tác nhân đầu cuối nhẹ tập trung vào các vòng lặp thực thi lệnh và mã hóa nhanh.",
"openclaw": "Sử dụng khi bạn muốn một tác nhân mã hóa kiểu Open Claw nhưng được định tuyến thông qua các chính sách OmniRoute.",
"cline": "Sử dụng khi bạn định cấu hình các tác nhân mã hóa bên trong trình chỉnh sửa và muốn thiết lập có hướng dẫn với các mô hình OmniRoute.",
"kilo": "Sử dụng khi quy trình làm việc của bạn phụ thuộc vào các lệnh Kilo Code và các chỉnh sửa lặp lại nhanh chóng.",
"cursor": "Sử dụng khi mã hóa bằng Con trỏ và bạn cần các mô hình tương thích với OpenAI tùy chỉnh thông qua OmniRoute.",
"continue": "Sử dụng khi chạy Tiếp tục trong IDE và bạn cần cấu hình nhà cung cấp dựa trên JSON di động.",
"opencode": "Sử dụng khi bạn thích chạy tác nhân gốc trên thiết bị đầu cuối và tự động hóa theo kịch bản thông qua OpenCode.",
"kiro": "Sử dụng khi tích hợp Kiro và điều khiển định tuyến mô hình tập trung từ OmniRoute.",
"antigravity": "Sử dụng khi lưu lượng truy cập AntiGravity/Kiro phải bị chặn thông qua MITM và được định tuyến đến OmniRoute.",
"copilot": "Sử dụng khi bạn muốn UX kiểu trò chuyện Copilot trong khi thực thi các khóa OmniRoute và quy tắc định tuyến."
}
},
"combos": {
"title": "Combo",
@ -1087,7 +1105,13 @@
"resetAllTitle": "Đặt lại tất cả các bộ ngắt mạch về trạng thái khỏe mạnh",
"resetting": "Đang đặt lại...",
"resetAll": "Đặt lại tất cả",
"until": "Cho đến {time}"
"until": "Cho đến {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "Được định cấu hình trong bảng điều khiển",
"configuredProvidersHint": "Nhà cung cấp có thông tin xác thực được lưu trong /dashboard/providers, bất kể trạng thái thời gian chạy.",
"activeProvidersHint": "Nhà cung cấp được định cấu hình hiện đã được bật cho các yêu cầu định tuyến.",
"monitoredProvidersHint": "Các nhà cung cấp hiện được theo dõi bởi máy theo dõi tình trạng ngắt mạch."
},
"limits": {
"title": "Giới hạn & hạn ngạch",
@ -1446,7 +1470,14 @@
"compatProtocolOpenAIResponses": "OpenAI Responses API",
"compatProtocolClaude": "Anthropic Messages",
"tokenRefreshed": "Token refreshed successfully",
"tokenRefreshFailed": "Token refresh failed"
"tokenRefreshFailed": "Token refresh failed",
"compatBadgeUpstreamHeaders": "Headers",
"compatUpstreamAddRow": "Add header",
"compatUpstreamHeaderName": "Header name",
"compatUpstreamHeaderValue": "Value",
"compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
"compatUpstreamHeadersLabel": "Extra upstream headers",
"compatUpstreamRemoveRow": "Remove row"
},
"settings": {
"title": "Cài đặt",
@ -1849,7 +1880,13 @@
"cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
"cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
"enableFingerprintTitle": "Enable fingerprint for {provider}",
"disableFingerprintTitle": "Disable fingerprint for {provider}"
"disableFingerprintTitle": "Disable fingerprint for {provider}",
"routingAdvancedGuideTitle": "Hướng dẫn định tuyến nâng cao",
"routingAdvancedGuideHint1": "Sử dụng Fill First để có mức độ ưu tiên có thể dự đoán được, Round Robin để đảm bảo tính công bằng và P2C để có khả năng phục hồi độ trễ.",
"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."
},
"translator": {
"title": "Người phiên dịch",
@ -2569,7 +2606,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "Auto-Combo Engine",
@ -2628,6 +2673,21 @@
"rerank": "Rerank",
"rerankModel": "Rerank Model",
"positionDelta": "Position Change",
"emptyState": "Send a search query to see results"
"emptyState": "Send a search query to see results",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
}
}

View file

@ -56,7 +56,9 @@
"warning": "警告",
"note": "注意事项",
"free": "免费",
"skipToContent": "跳至内容"
"skipToContent": "跳至内容",
"maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
"maintenanceServerUnreachable": "Server is unreachable. Reconnecting..."
},
"sidebar": {
"home": "首页",
@ -364,7 +366,22 @@
"rerank": "重排",
"rerankModel": "重排模型",
"positionDelta": "排名变化",
"emptyState": "发送搜索请求后即可查看结果"
"emptyState": "发送搜索请求后即可查看结果",
"safeSearchOff": "Off",
"safeSearchModerate": "Moderate",
"safeSearchStrict": "Strict",
"queryPlaceholder": "Enter search query...",
"providerAuto": "auto (cheapest)",
"searchTypeWeb": "web",
"searchTypeNews": "news",
"optionAny": "any",
"timeRangeDay": "Past day",
"timeRangeWeek": "Past week",
"timeRangeMonth": "Past month",
"timeRangeYear": "Past year",
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
},
"cliTools": {
"title": "CLI工具",
@ -612,7 +629,23 @@
"mitmStep1": "1. Start MITM to route requests through OmniRoute.",
"mitmStep2Prefix": "2. Add",
"mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
"mitmStep3": "3. Open {toolName} and requests will be proxied."
"mitmStep3": "3. Open {toolName} and requests will be proxied.",
"whenToUseLabel": "何时使用",
"openToolDocs": "打开工具文档",
"toolUseCases": {
"claude": "当您需要强大的规划工作流程和使用 Claude Code 进行长的多文件重构时使用。",
"codex": "当您的团队在 OpenAI Codex CLI 流程和基于配置文件的身份验证方面实现标准化时使用。",
"droid": "当您需要专注于快速编码和命令执行循环的轻量级终端代理时使用。",
"openclaw": "当您需要 Open Claw 风格的编码代理但通过 OmniRoute 策略进行路由时使用。",
"cline": "当您在编辑器内配置编码代理并希望使用 OmniRoute 模型进行引导设置时使用。",
"kilo": "当您的工作流程依赖于 Kilo Code 命令和快速迭代编辑时使用。",
"cursor": "在 Cursor 中编码并且需要通过 OmniRoute 自定义 OpenAI 兼容模型时使用。",
"continue": "在 IDE 中运行“Continue”并且需要可移植的基于 JSON 的提供程序配置时使用。",
"opencode": "当您更喜欢通过 OpenCode 进行终端本机代理运行和脚本自动化时使用。",
"kiro": "在集成 Kiro 并从 OmniRoute 集中控制模型路由时使用。",
"antigravity": "当必须通过 MITM 拦截 Antigravity/Kiro 流量并将其路由到 OmniRoute 时使用。",
"copilot": "当您想要 Copilot 聊天风格的 UX 同时强制执行 OmniRoute 键和路由规则时使用。"
}
},
"combos": {
"title": "组合",
@ -1135,7 +1168,13 @@
"resetAllTitle": "将所有断路器重置为正常状态",
"resetting": "正在重置...",
"resetAll": "全部重置",
"until": "直到 {time}"
"until": "直到 {time}",
"activeProviders": "{count} active",
"monitoredProviders": "{count} monitored",
"configuredProvidersLabel": "在仪表板中配置",
"configuredProvidersHint": "凭证保存在 /dashboard/providers 中的提供者,无论运行时状态如何。",
"activeProvidersHint": "当前启用路由请求的已配置提供程序。",
"monitoredProvidersHint": "目前由断路器运行状况监控器跟踪提供者。"
},
"limits": {
"title": "限制和配额",
@ -1904,7 +1943,13 @@
"customPricingNote": "你可以覆盖特定模型的默认定价。自定义覆盖会优先于自动检测到的定价。",
"editPricing": "编辑定价",
"viewFullDetails": "查看完整详情",
"themeCoral": "珊瑚色"
"themeCoral": "珊瑚色",
"routingAdvancedGuideTitle": "高级路线指导",
"routingAdvancedGuideHint1": "使用 Fill First 实现可预测的优先级,使用 Round Robin 实现公平性,使用 P2C 实现延迟弹性。",
"routingAdvancedGuideHint2": "如果提供商的质量/成本各不相同,请从“成本选择”开始进行后台工作,并从“最少使用”开始进行平衡磨损。",
"comboDefaultsGuideTitle": "如何调整组合默认值",
"comboDefaultsGuideHint1": "在低延迟流中保持较低的重试次数;仅增加长生成任务的超时。",
"comboDefaultsGuideHint2": "当一个提供程序需要与全局默认值不同的超时/重试行为时,请使用提供程序覆盖。"
},
"translator": {
"title": "翻译者",
@ -2612,7 +2657,15 @@
"opencodeDetected": "opencode {version} detected",
"opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
"downloadConfig": "Download {file}",
"downloaded": "Downloaded!"
"downloaded": "Downloaded!",
"setupGuideTitle": "Setup guide",
"openCliTools": "Open CLI Tools",
"setupGuideDetectCliTitle": "Detect installed CLIs",
"setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
"setupGuideCustomAgentTitle": "Register custom binary",
"setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
"setupGuideCommandMissingTitle": "Fix 'command not found'",
"setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."
},
"autoCombo": {
"title": "自动组合引擎",

View file

@ -9,27 +9,46 @@
*/
import { useState, useEffect } from "react";
import { useRef } from "react";
import { useTranslations } from "next-intl";
export default function MaintenanceBanner() {
const [show, setShow] = useState(false);
const [message, setMessage] = useState("");
const consecutiveFailuresRef = useRef(0);
const dismissedUntilRecoveryRef = useRef(false);
const t = useTranslations("common");
useEffect(() => {
const checkHealth = async () => {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 8000);
try {
const res = await fetch("/api/monitoring/health", {
signal: AbortSignal.timeout(3000),
signal: controller.signal,
cache: "no-store",
});
if (res.ok) {
consecutiveFailuresRef.current = 0;
dismissedUntilRecoveryRef.current = false;
setShow(false);
setMessage("");
} else {
setShow(true);
setMessage("Server is experiencing issues. Some features may be unavailable.");
consecutiveFailuresRef.current += 1;
// Require at least 2 failed checks to avoid transient false positives.
if (consecutiveFailuresRef.current >= 2 && !dismissedUntilRecoveryRef.current) {
setShow(true);
setMessage(t("maintenanceServerIssues"));
}
}
} catch {
setShow(true);
setMessage("Server is unreachable. Reconnecting...");
consecutiveFailuresRef.current += 1;
if (consecutiveFailuresRef.current >= 2 && !dismissedUntilRecoveryRef.current) {
setShow(true);
setMessage(t("maintenanceServerUnreachable"));
}
} finally {
clearTimeout(timeoutId);
}
};
@ -37,7 +56,7 @@ export default function MaintenanceBanner() {
checkHealth();
const interval = setInterval(checkHealth, 10000);
return () => clearInterval(interval);
}, []); // empty deps — checkHealth is defined inside effect, no stale closure
}, [t]);
if (!show) return null;
@ -50,9 +69,12 @@ export default function MaintenanceBanner() {
<span className="text-sm text-amber-200">{message}</span>
</div>
<button
onClick={() => setShow(false)}
onClick={() => {
dismissedUntilRecoveryRef.current = true;
setShow(false);
}}
className="p-1 rounded hover:bg-white/5 text-text-muted hover:text-text-main transition-colors"
aria-label="Dismiss"
aria-label={t("close")}
>
<span className="material-symbols-outlined text-[16px]">close</span>
</button>

View file

@ -0,0 +1,30 @@
import { CLI_TOOLS } from "./cliTools";
/**
* Provider IDs toggled in Settings -> CLI Fingerprint.
*
* Source of truth:
* - derive from visible CLI tools when a provider mapping exists
* - keep legacy-compatible IDs that are still used by existing setups
*/
const TOOL_ID_TO_PROVIDER_ID: Record<string, string> = {
kilo: "kilocode",
copilot: "github",
};
const DERIVED_PROVIDER_IDS = Object.values(CLI_TOOLS)
.map((tool: any) => TOOL_ID_TO_PROVIDER_ID[tool.id] ?? tool.id)
// "continue" currently has no provider id in AI_PROVIDERS
.filter((providerId) => providerId !== "continue");
const LEGACY_PROVIDER_IDS = [
// Keep to avoid breaking setups that saved old IDs
"copilot",
"kimi-coding",
"qwen",
];
export const CLI_COMPAT_PROVIDER_IDS = Array.from(
new Set([...DERIVED_PROVIDER_IDS, ...LEGACY_PROVIDER_IDS])
);

View file

@ -6,6 +6,7 @@ export const CLI_TOOLS = {
icon: "terminal",
color: "#D97757",
description: "Anthropic Claude Code CLI",
docsUrl: "https://docs.anthropic.com/en/docs/claude-code/overview",
configType: "env",
envVars: {
baseUrl: "ANTHROPIC_BASE_URL",
@ -47,6 +48,7 @@ export const CLI_TOOLS = {
image: "/providers/codex.png",
color: "#10A37F",
description: "OpenAI Codex CLI",
docsUrl: "https://github.com/openai/codex",
configType: "custom",
defaultCommand: "codex",
},
@ -56,6 +58,7 @@ export const CLI_TOOLS = {
image: "/providers/droid.png",
color: "#00D4FF",
description: "Factory Droid AI Assistant",
docsUrl: "/docs?section=cli-tools&tool=droid",
configType: "custom",
defaultCommand: "droid",
},
@ -65,6 +68,7 @@ export const CLI_TOOLS = {
image: "/providers/openclaw.png",
color: "#FF6B35",
description: "Open Claw AI Assistant",
docsUrl: "/docs?section=cli-tools&tool=openclaw",
configType: "custom",
defaultCommand: "openclaw",
},
@ -74,6 +78,7 @@ export const CLI_TOOLS = {
image: "/providers/cursor.png",
color: "#000000",
description: "Cursor AI Code Editor",
docsUrl: "https://docs.cursor.com/settings/models",
configType: "guide",
requiresCloud: true,
defaultCommands: ["agent", "cursor"],
@ -99,6 +104,7 @@ export const CLI_TOOLS = {
image: "/providers/cline.png",
color: "#00D1B2",
description: "Cline AI Coding Assistant CLI",
docsUrl: "https://docs.cline.bot/",
configType: "custom",
defaultCommand: "cline",
},
@ -108,6 +114,7 @@ export const CLI_TOOLS = {
image: "/providers/kilocode.png",
color: "#FF6B6B",
description: "Kilo Code AI Assistant CLI",
docsUrl: "/docs?section=cli-tools&tool=kilocode",
configType: "custom",
defaultCommand: "kilocode",
},
@ -117,6 +124,7 @@ export const CLI_TOOLS = {
image: "/providers/continue.png",
color: "#7C3AED",
description: "Continue AI Assistant",
docsUrl: "https://docs.continue.dev/",
configType: "guide",
guideSteps: [
{ step: 1, title: "Open Config", desc: "Open Continue configuration file" },
@ -145,6 +153,7 @@ export const CLI_TOOLS = {
image: "/providers/antigravity.png",
color: "#4285F4",
description: "Google Antigravity IDE with MITM",
docsUrl: "/docs?section=cli-tools&tool=antigravity",
configType: "mitm",
modelAliases: [
"claude-opus-4-6-thinking",
@ -177,6 +186,7 @@ export const CLI_TOOLS = {
image: "/providers/copilot.png",
color: "#1F6FEB",
description: "GitHub Copilot Chat — VS Code Extension",
docsUrl: "https://code.visualstudio.com/docs/copilot/overview",
configType: "custom",
},
opencode: {
@ -186,6 +196,7 @@ export const CLI_TOOLS = {
icon: "terminal",
color: "#FF6B35",
description: "OpenCode AI coding agent (Terminal)",
docsUrl: "/docs?section=cli-tools&tool=opencode",
configType: "guide",
defaultCommand: "opencode",
notes: [
@ -236,6 +247,7 @@ export const CLI_TOOLS = {
icon: "psychology_alt",
color: "#FF6B35",
description: "Amazon Kiro — AI-powered IDE with MITM",
docsUrl: "/docs?section=cli-tools&tool=kiro",
configType: "mitm",
guideSteps: [
{ step: 1, title: "Open Kiro Settings", desc: "Go to Settings → AI Provider" },

View file

@ -0,0 +1,94 @@
export type RoutingStrategyValue =
| "priority"
| "weighted"
| "round-robin"
| "fill-first"
| "p2c"
| "random"
| "least-used"
| "cost-optimized"
| "strict-random";
type RoutingStrategyOption = {
value: RoutingStrategyValue;
labelKey: string;
combosDescKey: string;
settingsDescKey: string;
icon: string;
};
export const ROUTING_STRATEGIES: RoutingStrategyOption[] = [
{
value: "priority",
labelKey: "priority",
combosDescKey: "priorityDesc",
settingsDescKey: "priorityDesc",
icon: "sort",
},
{
value: "weighted",
labelKey: "weighted",
combosDescKey: "weightedDesc",
settingsDescKey: "weightedDesc",
icon: "percent",
},
{
value: "round-robin",
labelKey: "roundRobin",
combosDescKey: "roundRobinDesc",
settingsDescKey: "roundRobinDesc",
icon: "autorenew",
},
{
value: "fill-first",
labelKey: "fillFirst",
combosDescKey: "fillFirstDesc",
settingsDescKey: "fillFirstDesc",
icon: "vertical_align_top",
},
{
value: "p2c",
labelKey: "p2c",
combosDescKey: "p2cDesc",
settingsDescKey: "p2cDesc",
icon: "balance",
},
{
value: "random",
labelKey: "random",
combosDescKey: "randomDesc",
settingsDescKey: "randomDesc",
icon: "shuffle",
},
{
value: "least-used",
labelKey: "leastUsed",
combosDescKey: "leastUsedDesc",
settingsDescKey: "leastUsedDesc",
icon: "low_priority",
},
{
value: "cost-optimized",
labelKey: "costOpt",
combosDescKey: "costOptimizedDesc",
settingsDescKey: "costOptDesc",
icon: "savings",
},
{
value: "strict-random",
labelKey: "strictRandom",
combosDescKey: "strictRandomDesc",
settingsDescKey: "strictRandomDesc",
icon: "casino",
},
];
export const SETTINGS_FALLBACK_STRATEGY_VALUES: RoutingStrategyValue[] = [
"fill-first",
"round-robin",
"p2c",
"random",
"least-used",
"cost-optimized",
"strict-random",
];