feat: Add i18n for new media and themes features, enhance combos with strategy guides and advanced settings, and introduce E2E tests for the combos flow.

This commit is contained in:
diegosouzapw
2026-03-05 13:01:37 -03:00
parent 21135407af
commit 2b067c5d00
33 changed files with 9432 additions and 1264 deletions

View File

@@ -1,6 +1,6 @@
"use client";
import { useState, useEffect, useCallback, useRef } from "react";
import { useState, useEffect, useCallback } from "react";
import {
Card,
Button,
@@ -29,6 +29,110 @@ const STRATEGY_OPTIONS = [
{ value: "cost-optimized", labelKey: "costOpt", descKey: "costOptimizedDesc", icon: "savings" },
];
const STRATEGY_GUIDANCE_FALLBACK = {
priority: {
when: "Use when you have one preferred model and only want fallback on failure.",
avoid: "Avoid when you need balanced load between models.",
example: "Example: Primary coding model with cheaper backup for outages.",
},
weighted: {
when: "Use when you need controlled traffic split across models.",
avoid: "Avoid when weights are not maintained or you need strict fairness.",
example: "Example: 80% stable model and 20% canary model for safe rollout.",
},
"round-robin": {
when: "Use when you need predictable, even request distribution.",
avoid: "Avoid when model latency/cost differs significantly.",
example: "Example: Same model across multiple accounts to spread throughput.",
},
random: {
when: "Use when you want a simple spread with low configuration effort.",
avoid: "Avoid when requests must be distributed with strict guarantees.",
example: "Example: Prototyping with equivalent models and no traffic policy.",
},
"least-used": {
when: "Use when you want adaptive balancing based on recent demand.",
avoid: "Avoid when your traffic is too low to benefit from usage balancing.",
example: "Example: Mixed workloads where one model tends to get overloaded.",
},
"cost-optimized": {
when: "Use when minimizing cost is the top priority.",
avoid: "Avoid when pricing data is missing or outdated.",
example: "Example: Batch or background jobs where lower cost matters most.",
},
};
const ADVANCED_FIELD_HELP_FALLBACK = {
maxRetries: "How many retries are attempted before failing the request.",
retryDelay: "Initial delay between retries. Higher values reduce burst pressure.",
timeout: "Maximum request time before aborting. Set higher for long generations.",
healthcheck: "Skips unhealthy models/providers from routing decisions when enabled.",
concurrencyPerModel: "Max simultaneous requests sent to each model in round-robin.",
queueTimeout: "How long a request can wait in queue before timeout in round-robin.",
};
const COMBO_USAGE_GUIDE_STORAGE_KEY = "omniroute:combos:hide-usage-guide";
const COMBO_TEMPLATE_FALLBACK = {
title: "Quick templates",
description: "Apply a starting profile, then adjust models and config.",
apply: "Apply template",
highAvailabilityTitle: "High availability",
highAvailabilityDesc: "Priority routing with health checks and safe retries.",
costSaverTitle: "Cost saver",
costSaverDesc: "Cost-optimized routing for budget-first workloads.",
balancedTitle: "Balanced load",
balancedDesc: "Least-used routing to spread demand over time.",
};
const COMBO_TEMPLATES = [
{
id: "high-availability",
icon: "shield",
titleKey: "templateHighAvailability",
descKey: "templateHighAvailabilityDesc",
fallbackTitle: COMBO_TEMPLATE_FALLBACK.highAvailabilityTitle,
fallbackDesc: COMBO_TEMPLATE_FALLBACK.highAvailabilityDesc,
strategy: "priority",
suggestedName: "high-availability",
config: {
maxRetries: 2,
retryDelayMs: 1500,
healthCheckEnabled: true,
},
},
{
id: "cost-saver",
icon: "savings",
titleKey: "templateCostSaver",
descKey: "templateCostSaverDesc",
fallbackTitle: COMBO_TEMPLATE_FALLBACK.costSaverTitle,
fallbackDesc: COMBO_TEMPLATE_FALLBACK.costSaverDesc,
strategy: "cost-optimized",
suggestedName: "cost-saver",
config: {
maxRetries: 1,
retryDelayMs: 500,
healthCheckEnabled: true,
},
},
{
id: "balanced",
icon: "balance",
titleKey: "templateBalanced",
descKey: "templateBalancedDesc",
fallbackTitle: COMBO_TEMPLATE_FALLBACK.balancedTitle,
fallbackDesc: COMBO_TEMPLATE_FALLBACK.balancedDesc,
strategy: "least-used",
suggestedName: "balanced-load",
config: {
maxRetries: 1,
retryDelayMs: 1000,
healthCheckEnabled: true,
},
},
];
function getStrategyMeta(strategy) {
return STRATEGY_OPTIONS.find((s) => s.value === strategy) || STRATEGY_OPTIONS[0];
}
@@ -50,6 +154,18 @@ function getStrategyBadgeClass(strategy) {
return "bg-blue-500/15 text-blue-600 dark:text-blue-400";
}
function getI18nOrFallback(t, key, fallback) {
if (typeof t.has === "function" && t.has(key)) return t(key);
return fallback;
}
function getStrategyGuideText(t, strategy, field) {
const strategyFallback =
STRATEGY_GUIDANCE_FALLBACK[strategy] || STRATEGY_GUIDANCE_FALLBACK.priority;
const key = `strategyGuide.${strategy}.${field}`;
return getI18nOrFallback(t, key, strategyFallback[field]);
}
// ─────────────────────────────────────────────
// Helper: normalize model entry (legacy string ↔ new object)
// ─────────────────────────────────────────────
@@ -81,6 +197,8 @@ export default function CombosPage() {
const [proxyTargetCombo, setProxyTargetCombo] = useState(null);
const [proxyConfig, setProxyConfig] = useState(null);
const [providerNodes, setProviderNodes] = useState([]);
const [showUsageGuide, setShowUsageGuide] = useState(true);
const [recentlyCreatedCombo, setRecentlyCreatedCombo] = useState("");
useEffect(() => {
fetchData();
@@ -90,6 +208,16 @@ export default function CombosPage() {
.catch(() => {});
}, []);
useEffect(() => {
try {
if (globalThis.localStorage?.getItem(COMBO_USAGE_GUIDE_STORAGE_KEY) === "1") {
setShowUsageGuide(false);
}
} catch {
// Ignore storage access errors (privacy mode / restricted environments)
}
}, []);
const fetchData = async () => {
try {
const [combosRes, providersRes, metricsRes, nodesRes] = await Promise.all([
@@ -129,6 +257,7 @@ export default function CombosPage() {
if (res.ok) {
await fetchData();
setShowCreateModal(false);
setRecentlyCreatedCombo(data.name?.trim() || "");
notify.success(t("comboCreated"));
} else {
const err = await res.json();
@@ -228,6 +357,20 @@ export default function CombosPage() {
}
};
const handleHideUsageGuideForever = () => {
setShowUsageGuide(false);
try {
globalThis.localStorage?.setItem(COMBO_USAGE_GUIDE_STORAGE_KEY, "1");
} catch {}
};
const handleShowUsageGuide = () => {
setShowUsageGuide(true);
try {
globalThis.localStorage?.removeItem(COMBO_USAGE_GUIDE_STORAGE_KEY);
} catch {}
};
if (loading) {
return (
<div className="flex flex-col gap-6">
@@ -245,12 +388,69 @@ export default function CombosPage() {
<h1 className="text-2xl font-semibold">{t("title")}</h1>
<p className="text-sm text-text-muted mt-1">{t("description")}</p>
</div>
<Button icon="add" onClick={() => setShowCreateModal(true)}>
{t("createCombo")}
</Button>
<div className="flex items-center gap-2">
{!showUsageGuide && (
<Button size="sm" variant="ghost" onClick={handleShowUsageGuide}>
{getI18nOrFallback(t, "usageGuideShow", "Show guide")}
</Button>
)}
<Button icon="add" onClick={() => setShowCreateModal(true)}>
{t("createCombo")}
</Button>
</div>
</div>
<ComboUsageGuide />
{showUsageGuide && (
<ComboUsageGuide
onHide={() => setShowUsageGuide(false)}
onHideForever={handleHideUsageGuideForever}
/>
)}
{recentlyCreatedCombo && (
<Card
padding="sm"
className="border border-emerald-500/20 bg-emerald-500/[0.04] dark:bg-emerald-500/[0.08]"
>
<div className="flex flex-wrap items-center justify-between gap-2">
<div className="min-w-0">
<p className="text-sm font-medium text-emerald-700 dark:text-emerald-300">
{getI18nOrFallback(
t,
"quickTestTitle",
`Combo "${recentlyCreatedCombo}" ready to validate`
)}
</p>
<code className="inline-block text-[11px] mt-0.5 px-1.5 py-0.5 rounded bg-emerald-500/15 text-emerald-700 dark:text-emerald-300">
{recentlyCreatedCombo}
</code>
<p className="text-xs text-text-muted mt-0.5">
{getI18nOrFallback(
t,
"quickTestDescription",
"Run a test now to confirm fallback and latency behavior."
)}
</p>
</div>
<div className="flex items-center gap-2">
<Button
size="sm"
variant="secondary"
icon="play_arrow"
onClick={() => {
handleTestCombo({ name: recentlyCreatedCombo });
setRecentlyCreatedCombo("");
}}
>
{getI18nOrFallback(t, "testNow", "Test now")}
</Button>
<Button size="sm" variant="ghost" onClick={() => setRecentlyCreatedCombo("")}>
{tc("close")}
</Button>
</div>
</div>
</Card>
)}
{/* Combos List */}
{combos.length === 0 ? (
@@ -332,21 +532,36 @@ export default function CombosPage() {
);
}
function ComboUsageGuide() {
function ComboUsageGuide({ onHide, onHideForever }) {
const t = useTranslations("combos");
const guideStrategies = ["priority", "cost-optimized", "least-used"];
return (
<Card padding="sm">
<div className="flex items-center gap-2">
<div className="size-7 rounded-lg bg-primary/10 flex items-center justify-center shrink-0">
<span className="material-symbols-outlined text-primary text-[16px]">
tips_and_updates
</span>
<div className="flex items-start justify-between gap-2">
<div className="flex items-center gap-2 min-w-0">
<div className="size-7 rounded-lg bg-primary/10 flex items-center justify-center shrink-0">
<span className="material-symbols-outlined text-primary text-[16px]">
tips_and_updates
</span>
</div>
<div className="min-w-0">
<h2 className="text-sm font-semibold">{t("routingStrategy")}</h2>
<p className="text-xs text-text-muted mt-0.5">{t("description")}</p>
</div>
</div>
<div className="min-w-0">
<h2 className="text-sm font-semibold">{t("routingStrategy")}</h2>
<p className="text-xs text-text-muted mt-0.5">{t("description")}</p>
<div className="flex items-center gap-1 shrink-0">
<Button size="sm" variant="ghost" onClick={onHide} className="!h-6 px-2 text-[10px]">
{getI18nOrFallback(t, "usageGuideHide", "Hide")}
</Button>
<Button
size="sm"
variant="ghost"
onClick={onHideForever}
className="!h-6 px-2 text-[10px]"
>
{getI18nOrFallback(t, "usageGuideDontShowAgain", "Don't show again")}
</Button>
</div>
</div>
@@ -375,6 +590,50 @@ function ComboUsageGuide() {
);
}
function StrategyGuidanceCard({ strategy }) {
const t = useTranslations("combos");
return (
<div className="rounded-lg border border-black/10 dark:border-white/10 bg-black/[0.02] dark:bg-white/[0.02] p-2.5">
<div className="text-[11px] text-text-muted">
{getI18nOrFallback(t, "strategyGuideTitle", "How to use this strategy")}
</div>
<div className="mt-1.5 flex flex-col gap-1.5 text-[11px]">
<p className="text-text-main">
<span className="font-semibold">
{getI18nOrFallback(t, "strategyGuideWhen", "When to use")}:
</span>{" "}
{getStrategyGuideText(t, strategy, "when")}
</p>
<p className="text-text-main">
<span className="font-semibold">
{getI18nOrFallback(t, "strategyGuideAvoid", "Avoid when")}:
</span>{" "}
{getStrategyGuideText(t, strategy, "avoid")}
</p>
<p className="text-text-main">
<span className="font-semibold">
{getI18nOrFallback(t, "strategyGuideExample", "Example")}:
</span>{" "}
{getStrategyGuideText(t, strategy, "example")}
</p>
</div>
</div>
);
}
function FieldLabelWithHelp({ label, help }) {
return (
<div className="flex items-center gap-1 mb-0.5">
<label className="text-[10px] text-text-muted">{label}</label>
<Tooltip content={help}>
<span className="material-symbols-outlined text-[12px] text-text-muted cursor-help">
help
</span>
</Tooltip>
</div>
);
}
// ─────────────────────────────────────────────
// Combo Card
// ─────────────────────────────────────────────
@@ -634,26 +893,66 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
const [showModelSelect, setShowModelSelect] = useState(false);
const [saving, setSaving] = useState(false);
const [nameError, setNameError] = useState("");
const [pricingByProvider, setPricingByProvider] = useState({});
const [modelAliases, setModelAliases] = useState({});
const [providerNodes, setProviderNodes] = useState([]);
const [showAdvanced, setShowAdvanced] = useState(false);
const [config, setConfig] = useState(combo?.config || {});
// DnD state
const hasPricingForModel = useCallback(
(modelValue) => {
const parts = modelValue.split("/");
if (parts.length !== 2) return false;
const [providerIdentifier, modelId] = parts;
const matchedNode = providerNodes.find(
(node) => node.id === providerIdentifier || node.prefix === providerIdentifier
);
const providerCandidates = [providerIdentifier];
if (matchedNode?.apiType) providerCandidates.push(matchedNode.apiType);
if (matchedNode?.name) providerCandidates.push(String(matchedNode.name).toLowerCase());
return providerCandidates.some((candidate) => !!pricingByProvider?.[candidate]?.[modelId]);
},
[pricingByProvider, providerNodes]
);
const [dragIndex, setDragIndex] = useState(null);
const [dragOverIndex, setDragOverIndex] = useState(null);
const weightTotal = models.reduce((sum, modelEntry) => sum + (modelEntry.weight || 0), 0);
const pricedModelCount = models.reduce(
(count, modelEntry) => count + (hasPricingForModel(modelEntry.model) ? 1 : 0),
0
);
const pricingCoveragePercent =
models.length > 0 ? Math.round((pricedModelCount / models.length) * 100) : 0;
const hasNoModels = models.length === 0;
const hasRoundRobinSingleModel = strategy === "round-robin" && models.length === 1;
const hasCostOptimizedWithoutPricing =
strategy === "cost-optimized" && models.length > 0 && pricedModelCount === 0;
const hasCostOptimizedPartialPricing =
strategy === "cost-optimized" &&
models.length > 0 &&
pricedModelCount > 0 &&
pricedModelCount < models.length;
const hasInvalidWeightedTotal =
strategy === "weighted" && models.length > 0 && weightTotal !== 100;
const saveBlocked =
!name.trim() || !!nameError || saving || hasNoModels || hasInvalidWeightedTotal;
!name.trim() ||
!!nameError ||
saving ||
hasNoModels ||
hasInvalidWeightedTotal ||
hasCostOptimizedWithoutPricing;
const fetchModalData = async () => {
try {
const [aliasesRes, nodesRes] = await Promise.all([
const [aliasesRes, nodesRes, pricingRes] = await Promise.all([
fetch("/api/models/alias"),
fetch("/api/provider-nodes"),
fetch("/api/pricing"),
]);
if (!aliasesRes.ok || !nodesRes.ok) {
@@ -661,8 +960,14 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
`Failed to fetch data: aliases=${aliasesRes.status}, nodes=${nodesRes.status}`
);
}
const pricingData = pricingRes.ok ? await pricingRes.json() : {};
const [aliasesData, nodesData] = await Promise.all([aliasesRes.json(), nodesRes.json()]);
setPricingByProvider(
pricingData && typeof pricingData === "object" && !Array.isArray(pricingData)
? pricingData
: {}
);
setModelAliases(aliasesData.aliases || {});
setProviderNodes(nodesData.nodes || []);
} catch (error) {
@@ -726,6 +1031,12 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
);
};
const applyTemplate = (template) => {
setStrategy(template.strategy);
setConfig((prev) => ({ ...prev, ...template.config }));
if (!name.trim()) setName(template.suggestedName);
};
// Format model display name with readable provider name
const formatModelDisplay = useCallback(
(modelValue) => {
@@ -799,7 +1110,7 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
const handleSave = async () => {
if (!validateName(name)) return;
if (hasNoModels || hasInvalidWeightedTotal) return;
if (hasNoModels || hasInvalidWeightedTotal || hasCostOptimizedWithoutPricing) return;
setSaving(true);
const saveData: any = {
@@ -842,6 +1153,48 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
<p className="text-[10px] text-text-muted mt-0.5">{t("nameHint")}</p>
</div>
{!isEdit && (
<div className="rounded-lg border border-black/10 dark:border-white/10 bg-black/[0.02] dark:bg-white/[0.02] p-2.5">
<div className="mb-2">
<p className="text-xs font-medium">
{getI18nOrFallback(t, "templatesTitle", COMBO_TEMPLATE_FALLBACK.title)}
</p>
<p className="text-[10px] text-text-muted mt-0.5">
{getI18nOrFallback(
t,
"templatesDescription",
COMBO_TEMPLATE_FALLBACK.description
)}
</p>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-1.5">
{COMBO_TEMPLATES.map((template) => (
<button
type="button"
key={template.id}
onClick={() => applyTemplate(template)}
className="text-left rounded-md border border-black/10 dark:border-white/10 bg-white/70 dark:bg-white/[0.03] px-2 py-1.5 hover:border-primary/40 hover:bg-primary/5 transition-colors"
>
<div className="flex items-center gap-1.5">
<span className="material-symbols-outlined text-[14px] text-primary">
{template.icon}
</span>
<span className="text-[11px] font-medium text-text-main">
{getI18nOrFallback(t, template.titleKey, template.fallbackTitle)}
</span>
</div>
<p className="text-[10px] text-text-muted mt-1 leading-4">
{getI18nOrFallback(t, template.descKey, template.fallbackDesc)}
</p>
<p className="text-[10px] text-primary mt-1">
{getI18nOrFallback(t, "templateApply", COMBO_TEMPLATE_FALLBACK.apply)}
</p>
</button>
))}
</div>
</div>
)}
{/* Strategy Toggle */}
<div>
<div className="flex items-center gap-1 mb-1.5">
@@ -875,6 +1228,9 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
<p className="text-[10px] text-text-muted mt-0.5">
{getStrategyDescription(t, strategy)}
</p>
<div className="mt-2">
<StrategyGuidanceCard strategy={strategy} />
</div>
</div>
{/* Models */}
@@ -929,6 +1285,25 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
{formatModelDisplay(entry.model)}
</div>
{strategy === "cost-optimized" && (
<span
className={`text-[9px] px-1.5 py-0.5 rounded-full uppercase font-semibold ${
hasPricingForModel(entry.model)
? "bg-emerald-500/15 text-emerald-600 dark:text-emerald-400"
: "bg-amber-500/15 text-amber-600 dark:text-amber-400"
}`}
title={
hasPricingForModel(entry.model)
? getI18nOrFallback(t, "pricingAvailable", "Pricing available")
: getI18nOrFallback(t, "pricingMissing", "No pricing")
}
>
{hasPricingForModel(entry.model)
? getI18nOrFallback(t, "pricingAvailableShort", "priced")
: getI18nOrFallback(t, "pricingMissingShort", "no-price")}
</span>
)}
{/* Weight input (weighted mode only) */}
{strategy === "weighted" && (
<div className="flex items-center gap-0.5 shrink-0">
@@ -986,6 +1361,38 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
{/* Weight total indicator */}
{strategy === "weighted" && models.length > 0 && <WeightTotalBar models={models} />}
{strategy === "cost-optimized" && models.length > 0 && (
<div className="mt-2 rounded-md border border-black/10 dark:border-white/10 bg-black/[0.02] dark:bg-white/[0.02] px-2 py-1.5">
<div className="flex items-center justify-between text-[10px]">
<span className="text-text-muted">
{getI18nOrFallback(t, "pricingCoverage", "Pricing coverage")}
</span>
<span className="font-medium text-text-main">
{pricedModelCount}/{models.length} ({pricingCoveragePercent}%)
</span>
</div>
<div className="h-1.5 mt-1 rounded-full bg-black/10 dark:bg-white/10 overflow-hidden">
<div
className={`h-full transition-all duration-300 ${
pricingCoveragePercent === 100
? "bg-emerald-500"
: pricingCoveragePercent > 0
? "bg-amber-500"
: "bg-red-500"
}`}
style={{ width: `${pricingCoveragePercent}%` }}
/>
</div>
<p className="text-[10px] text-text-muted mt-1">
{getI18nOrFallback(
t,
"pricingCoverageHint",
"Cost-optimized works best when all combo models have pricing."
)}
</p>
</div>
)}
{hasNoModels && (
<div className="mt-2 rounded-md border border-amber-500/20 bg-amber-500/10 px-2 py-1.5 text-[10px] text-amber-700 dark:text-amber-300 flex items-center gap-1">
<span className="material-symbols-outlined text-[12px]">warning</span>
@@ -1002,6 +1409,46 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
</div>
)}
{hasRoundRobinSingleModel && (
<div className="mt-2 rounded-md border border-blue-500/20 bg-blue-500/10 px-2 py-1.5 text-[10px] text-blue-700 dark:text-blue-300 flex items-center gap-1">
<span className="material-symbols-outlined text-[12px]">info</span>
<span>
{getI18nOrFallback(
t,
"warningRoundRobinSingleModel",
"Round-robin is most useful with at least 2 models."
)}
</span>
</div>
)}
{hasCostOptimizedPartialPricing && (
<div className="mt-2 rounded-md border border-amber-500/20 bg-amber-500/10 px-2 py-1.5 text-[10px] text-amber-700 dark:text-amber-300 flex items-center gap-1">
<span className="material-symbols-outlined text-[12px]">warning</span>
<span>
{typeof t.has === "function" && t.has("warningCostOptimizedPartialPricing")
? t("warningCostOptimizedPartialPricing", {
priced: pricedModelCount,
total: models.length,
})
: `Only ${pricedModelCount} of ${models.length} models have pricing. Routing may be partially cost-aware.`}
</span>
</div>
)}
{hasCostOptimizedWithoutPricing && (
<div className="mt-2 rounded-md border border-amber-500/20 bg-amber-500/10 px-2 py-1.5 text-[10px] text-amber-700 dark:text-amber-300 flex items-center gap-1">
<span className="material-symbols-outlined text-[12px]">warning</span>
<span>
{getI18nOrFallback(
t,
"warningCostOptimizedNoPricing",
"No pricing data found for this combo. Cost-optimized may route unexpectedly."
)}
</span>
</div>
)}
{/* Add Model button */}
<button
onClick={() => setShowModelSelect(true)}
@@ -1027,9 +1474,14 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
<div className="flex flex-col gap-2 p-3 bg-black/[0.02] dark:bg-white/[0.02] rounded-lg border border-black/5 dark:border-white/5">
<div className="grid grid-cols-2 gap-2">
<div>
<label className="text-[10px] text-text-muted mb-0.5 block">
{t("maxRetries")}
</label>
<FieldLabelWithHelp
label={t("maxRetries")}
help={getI18nOrFallback(
t,
"advancedHelp.maxRetries",
ADVANCED_FIELD_HELP_FALLBACK.maxRetries
)}
/>
<input
type="number"
min="0"
@@ -1046,9 +1498,14 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
/>
</div>
<div>
<label className="text-[10px] text-text-muted mb-0.5 block">
{t("retryDelay")}
</label>
<FieldLabelWithHelp
label={t("retryDelay")}
help={getI18nOrFallback(
t,
"advancedHelp.retryDelay",
ADVANCED_FIELD_HELP_FALLBACK.retryDelay
)}
/>
<input
type="number"
min="0"
@@ -1066,7 +1523,14 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
/>
</div>
<div>
<label className="text-[10px] text-text-muted mb-0.5 block">{t("timeout")}</label>
<FieldLabelWithHelp
label={t("timeout")}
help={getI18nOrFallback(
t,
"advancedHelp.timeout",
ADVANCED_FIELD_HELP_FALLBACK.timeout
)}
/>
<input
type="number"
min="1000"
@@ -1083,8 +1547,15 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
className="w-full text-xs py-1.5 px-2 rounded border border-black/10 dark:border-white/10 bg-transparent focus:border-primary focus:outline-none"
/>
</div>
<div className="flex items-center gap-2">
<label className="text-[10px] text-text-muted">{t("healthcheck")}</label>
<div className="flex items-center justify-between gap-2">
<FieldLabelWithHelp
label={t("healthcheck")}
help={getI18nOrFallback(
t,
"advancedHelp.healthcheck",
ADVANCED_FIELD_HELP_FALLBACK.healthcheck
)}
/>
<input
type="checkbox"
checked={config.healthCheckEnabled !== false}
@@ -1096,9 +1567,14 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
{strategy === "round-robin" && (
<div className="grid grid-cols-2 gap-2 pt-2 border-t border-black/5 dark:border-white/5">
<div>
<label className="text-[10px] text-text-muted mb-0.5 block">
{t("concurrencyPerModel")}
</label>
<FieldLabelWithHelp
label={t("concurrencyPerModel")}
help={getI18nOrFallback(
t,
"advancedHelp.concurrencyPerModel",
ADVANCED_FIELD_HELP_FALLBACK.concurrencyPerModel
)}
/>
<input
type="number"
min="1"
@@ -1115,9 +1591,14 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) {
/>
</div>
<div>
<label className="text-[10px] text-text-muted mb-0.5 block">
{t("queueTimeout")}
</label>
<FieldLabelWithHelp
label={t("queueTimeout")}
help={getI18nOrFallback(
t,
"advancedHelp.queueTimeout",
ADVANCED_FIELD_HELP_FALLBACK.queueTimeout
)}
/>
<input
type="number"
min="1000"

View File

@@ -69,11 +69,14 @@
"health": "الصحة",
"limits": "الحدود والحصص",
"cliTools": "أدوات سطر الأوامر",
"media": "الوسائط",
"settings": "الإعدادات",
"translator": "مترجم",
"docs": "المستندات",
"issues": "القضايا",
"endpoint": "نقطة النهاية",
"mcp": "محترف معتمد من مايكروسوفت",
"a2a": "أ2أ",
"apiManager": "مدير API",
"logs": "سجلات",
"auditLog": "سجل التدقيق",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "تم إيقاف الخادم الوكيل أو يتم إعادة تشغيله.",
"expandSidebar": "قم بتوسيع الشريط الجانبي",
"collapseSidebar": "طي الشريط الجانبي",
"media": "الوسائط"
"themes": "المواضيع",
"presetColors": "الألوان الشائعة",
"createTheme": "إنشاء سمة",
"chooseColor": "لون واحد",
"themeCoral": "قدرة الشُّعَب المرجانية",
"themeBlue": "أزرق",
"themeRed": "أحمر",
"themeGreen": "أخضر",
"themeViolet": "بنفسجي ساحر",
"themeOrange": "أورانج (Orange)",
"themeCyan": "كيان"
},
"themesPage": {
"title": "المواضيع",
"description": "اختر قالبًا محددًا مسبقًا أو أنشئ قالبًا خاصًا بك بلون واحد",
"presetColors": "الألوان الشائعة",
"customTheme": "قالب مخصص",
"customThemeDesc": "انقر على إنشاء قالب واختر لونًا واحدًا",
"createTheme": "إنشاء سمة",
"activePreset": "القالب المفعّل"
},
"header": {
"logout": "تسجيل الخروج",
@@ -108,10 +130,18 @@
"homeDescription": "مرحبًا بك في OmniRoute",
"endpoint": "نقطة النهاية",
"endpointDescription": "تكوين نقطة النهاية API",
"mcp": "إدارة MCP",
"mcpDescription": "مراقبة عملية خادم MCP والأدوات والضوابط التشغيلية",
"a2a": "إدارة A2A",
"a2aDescription": "مراقبة حالة Agent2Agent والمهام ونشاط البث",
"settings": "الإعدادات",
"settingsDescription": "إدارة تفضيلاتك",
"openaiCompatible": "متوافق مع OpenAI",
"anthropicCompatible": "متوافق مع Anthropic"
"anthropicCompatible": "متوافق مع Anthropic",
"media": "الإعلام",
"mediaDescription": "إنشاء الصور ومقاطع الفيديو والموسيقى",
"themes": "المواضيع",
"themesDescription": "اختر سمة لون للوحة المعلومات بأكملها"
},
"home": {
"quickStart": "بداية سريعة",
@@ -261,6 +291,21 @@
"showing": "عرض {count} إدخالات (الإزاحة {offset})",
"previous": "السابق"
},
"media": {
"title": "استوديو الوسائط",
"subtitle": "أنشئ صورًا وفيديوهات وموسيقى",
"model": "Model",
"prompt": "Prompt",
"generate": "إنشاء",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "أدوات سطر الأوامر",
"noActiveProviders": "لا يوجد مقدمي خدمات نشطين",
@@ -533,7 +578,75 @@
"saving": "جارٍ الحفظ...",
"weighted": "مرجح",
"leastUsed": "الأقل استخدامًا",
"costOpt": "تكلفة الاختيار"
"costOpt": "تكلفة الاختيار",
"strategyGuideTitle": "كيفية استخدام هذه الاستراتيجية",
"strategyGuideWhen": " متى تُستخدم؟",
"strategyGuideAvoid": "تجنب متى",
"strategyGuideExample": "ﻣﺜﺎل",
"strategyGuide": {
"priority": {
"when": "لديك نموذج مفضل واحد وتريد فقط التراجع عن الفشل.",
"avoid": "تحتاج إلى توزيع الطلبات عبر النماذج.",
"example": "نموذج الترميز الأساسي مع نسخة احتياطية أرخص للانقطاعات."
},
"weighted": {
"when": "تحتاج إلى تقسيم حركة المرور المتحكم فيها عبر النماذج.",
"avoid": "لا يمكنك الحفاظ على أوزان دقيقة بمرور الوقت.",
"example": "80 ٪ نموذج مستقر + 20 ٪ طرح نموذج الكناري."
},
"round-robin": {
"when": "تريد توزيعًا يمكن التنبؤ به ومتساويًا.",
"avoid": "تختلف النماذج كثيرًا من حيث الكمون أو التكلفة.",
"example": "نفس النموذج على حسابات متعددة لنشر الإنتاجية."
},
"random": {
"when": "تريد توزيعًا بسيطًا مع الحد الأدنى من الإعداد.",
"avoid": "تحتاج إلى ضمانات صارمة لحركة المرور.",
"example": "وضع نماذج أوّلية سريعة بنماذج مكافئة."
},
"least-used": {
"when": "تريد موازنة تكيفية بناءً على الطلب المباشر.",
"avoid": "حركة المرور منخفضة للغاية للاستفادة من موازنة الاستخدام.",
"example": "أعباء العمل المختلطة حيث غالبًا ما يكون أحد النماذج مثقلًا."
},
"cost-optimized": {
"when": "تخفيض التكلفة هو على رأس أولوياتك.",
"avoid": "بيانات التسعير مفقودة أو قديمة.",
"example": "وظائف الخلفية أو الدُفعات حيث تكون التكلفة الأقل مفضلة."
}
},
"advancedHelp": {
"maxRetries": "كم عدد محاولات إعادة المحاولة قبل فشل الطلب.",
"retryDelay": "الانتظار الأولي بين المحاولات. القيم الأعلى تقلل من ضغط الاندفاع.",
"timeout": "الحد الأقصى لمدة الطلب قبل الإلغاء.",
"healthcheck": "يتخطى النماذج/مقدمي الخدمات غير الصحيين من قرارات التوجيه.",
"concurrencyPerModel": "الحد الأقصى للطلبات المتزامنة المسموح بها لكل نموذج في جولة روبن.",
"queueTimeout": "كم من الوقت يمكن أن ينتظر الطلب في قائمة الانتظار قبل انتهاء المهلة."
},
"templatesTitle": "قوالب سريعة",
"templatesDescription": "تطبيق ملف تعريف البدء، ثم ضبط النماذج والتكوين.",
"templateApply": "قالب التطبيق",
"templateHighAvailability": "الإتاحة العالية",
"templateHighAvailabilityDesc": "أولوية التوجيه مع الفحوصات الصحية والمحاولات الآمنة.",
"templateCostSaver": "موفر للتكاليف",
"templateCostSaverDesc": "التوجيه الأمثل من حيث التكلفة لأعباء العمل ذات الميزانية الأولى.",
"templateBalanced": "حمل موازن",
"templateBalancedDesc": "التوجيه الأقل استخدامًا لنشر الطلب بمرور الوقت.",
"usageGuideHide": "مخفي",
"usageGuideDontShowAgain": "يرجى عدم العرض مرة أخرى",
"usageGuideShow": "دليل البرنامج",
"quickTestTitle": "التحرير والسرد جاهز للتحقق",
"quickTestDescription": "قم بإجراء اختبار الآن لتأكيد سلوك التراجع والكمون.",
"testNow": " \"اختبر الآن\"،",
"pricingCoverage": "تغطية التسعير",
"pricingCoverageHint": "يعمل تحسين التكلفة بشكل أفضل عندما يكون لجميع طرازات التحرير والسرد أسعار.",
"pricingAvailable": "التسعير متاح",
"pricingMissing": "لا يوجد تسعير",
"pricingAvailableShort": "غالي, عالي السعر",
"pricingMissingShort": "رسم",
"warningRoundRobinSingleModel": "يعتبر Round - robin أكثر فائدة مع طرازين على الأقل.",
"warningCostOptimizedPartialPricing": "فقط {priced} من طرازات {total} لها أسعار. قد يكون التوجيه مدركًا جزئيًا للتكلفة.",
"warningCostOptimizedNoPricing": "لم يتم العثور على بيانات تسعير لهذه المجموعة. قد يتم توجيه التكلفة المحسّنة بشكل غير متوقع."
},
"costs": {
"title": "التكاليف",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "تحويل النص إلى كلام يبدو طبيعيا",
"moderations": "الاعتدالات",
"moderationsDesc": "الإشراف على المحتوى وتصنيف السلامة",
"responsesDesc": "واجهة Responses من OpenAI لـ Codex وسير العمل الوكيلية المتقدمة",
"listModelsDesc": "قائمة جميع النماذج المتاحة عبر جميع المزودين المتصلين",
"settingsApiDesc": "قراءة وتعديل إعدادات OmniRoute عبر API",
"settingsApi": "Settings API",
"categoryCore": "واجهات API الأساسية",
"categoryMedia": "الوسائط والمتعدد الوسائط",
"categoryUtility": "أدوات فرعية وإدارة",
"enableCloudTitle": "تمكين الوكيل السحابي",
"whatYouGet": "ما سوف تحصل عليه",
"cloudBenefitAccess": "الوصول إلى API الخاص بك من أي مكان في العالم",
@@ -613,13 +733,154 @@
"image": "صورة",
"custom": "مخصص",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "واجهة Responses من OpenAI لـ Codex وسير العمل الوكيلية المتقدمة",
"listModelsDesc": "قائمة جميع النماذج المتاحة عبر جميع المزودين المتصلين",
"settingsApi": "Settings API",
"settingsApiDesc": "قراءة وتعديل إعدادات OmniRoute عبر API",
"categoryCore": "واجهات API الأساسية",
"categoryMedia": "الوسائط والمتعدد الوسائط",
"categoryUtility": "أدوات فرعية وإدارة"
"sectionTitle": "سطح التكامل",
"sectionDescription": "واجهات برمجة التطبيقات المتوافقة مع OpenAI ونقاط نهاية البروتوكول التشغيلية",
"tabApis": "واجهات برمجة تطبيقات متوافقة مع OpenAI",
"tabProtocols": "البروتوكولات",
"tabsAria": "أقسام نقطة النهاية",
"protocolsTitle": "البروتوكولات",
"protocolsDescription": "MCP و A2A هي نقاط نهاية من الدرجة الأولى مع إمكانية مراقبة وضوابط مخصصة.",
"mcpCardTitle": "خادم MCP",
"mcpCardDescription": "بروتوكول سياق النموذج عبر stdio",
"a2aCardTitle": "خادم A2A",
"a2aCardDescription": "نقطة نهاية Agent2Agent JSON - RPC",
"protocolToolsLabel": "الأدوات المطلوبة:",
"protocolTasksLabel": "المهام",
"protocolActiveStreamsLabel": "لا يوجد بث نشط...",
"protocolLastActivity": "النشاط الاخير",
"quickStart": "التشغيل السريع",
"openMcpDashboard": "فتح إدارة MCP",
"openA2aDashboard": "فتح إدارة A2A",
"mcpQuickStartTitle": "البدء السريع",
"mcpQuickStartStep1": "قم بتشغيل خادم MCP عبر `omniroute --mcp`.",
"mcpQuickStartStep2": "قم بتكوين عميل MCP الخاص بك للاتصال عبر نقل stdio.",
"mcpQuickStartStep3": "استدعاء أدوات مثل `omniroute_get_health` و `omniroute_list_combos`.",
"a2aQuickStartTitle": "البدء السريع",
"a2aQuickStartStep1": "اكتشف بطاقة الوكيل على `/.well-known/agent.json`.",
"a2aQuickStartStep2": "إرسال طلبات JSON - RPC إلى@@ PH0 @@ باستخدام @@PH1 @@ أو `message/stream`.",
"a2aQuickStartStep3": "تتبع المهام والتحكم فيها باستخدام `tasks/get` و `tasks/cancel`."
},
"mcpDashboard": {
"loading": "جارٍ تحميل لوحة تحكم MCP...",
"activate": "ينشط",
"deactivate": "إيقاف نشاطإلغاء تنشيط",
"confirmSwitchCombo": "تأكيد @@PH0 @@ COMBO \"@@ PH1 @@\"؟",
"switchComboFailed": "فشل تبديل حالة التحرير والسرد.",
"switchComboSuccess": "تم تحديث المجموعة \"@@PH0 @@\".",
"confirmApplyProfile": "تطبيق ملف المرونة \"@@ PH0 @@\"؟",
"applyProfileFailed": "فشل تطبيق ملف المرونة.",
"applyProfileSuccess": "تم تطبيق الملف الشخصي \"@@PH0 @@\".",
"confirmResetBreakers": "هل تريد إعادة تعيين جميع قواطع الدائرة ؟",
"resetBreakersFailed": "فشل إعادة ضبط قواطع الدائرة.",
"resetBreakersSuccess": "إعادة ضبط قواطع الدائرة.",
"processStatus": "حالة المعالجة",
"online": "الويب",
"offline": "غير متصل",
"pid": "معرف المشروع",
"sessionUptime": "وقت تشغيل الدورة",
"lastHeartbeat": "آخر نبضة قلب",
"activity24h": "النشاط (24 ساعة)",
"totalCalls": "مجموع المكالمات",
"successRate": "معدل النجاح",
"avgLatency": "متوسط زمن الوصول",
"topTools": "أفضل الأدوات",
"noToolCalls24h": "لا توجد مكالمات للأدوات خلال الـ 24 ساعة الماضية.",
"runtimeDetails": "تفاصيل وقت التشغيل",
"transport": "النقل",
"scopesEnforced": "النطاقات التي تم فرضها",
"yes": "نعم",
"no": "عددي",
"lastCall": "آخر مكالمة",
"heartbeatPath": "مسار نبضات القلب",
"operationalControls": "الضوابط التشغيلية",
"switchCombo": "تبديل الكومبو",
"inactive": "غير نشط",
"active": "نشط",
"activateCombo": "تفعيل التحرير والسرد",
"deactivateCombo": "إلغاء تنشيط التحرير والسرد",
"applyResilienceProfile": "تطبيق ملف المرونة",
"profileAggressive": "عدواني",
"profileBalanced": "متوازن, في حالة إتزان, متعادل",
"profileConservative": "محافظ, واق, مقاوم للتغيير, معتدل",
"applyProfile": "تطبيق الطور",
"resetCircuitBreakers": "إعادة تعيين قواطع الدائرة",
"resetCircuitBreakersHelp": "مسح حالة القاطع الحالي وعدادات الأعطال لمقدمي الخدمات.",
"resetAllBreakers": "إعادة تعيين جميع القواطع",
"toolsAndScopes": "الأدوات والنطاقات",
"tableTool": "الأداة",
"tableScopes": "مناظير",
"tablePhase": "المرحلة",
"tableAudit": "المراجعة",
"auditLog": "سجل التدقيق",
"auditSummary": "المكالمات: {total} | page {page} of {totalPages}",
"allTools": "فتح جميع الأدوات",
"allResults": "عرض كل النتائج",
"success": "ناجحة",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "جارٍ تحميل إدخالات التدقيق...",
"noAuditEntriesForFilters": "لم يتم العثور على إدخالات تدقيق لعوامل التصفية الحالية.",
"tableTimestamp": "الطابع الزمني",
"tableDuration": "المدة",
"tableResult": "النتيجة",
"tableApiKey": "مفتاح API",
"failed": "فشل",
"previous": "السابق",
"next": "التالي"
},
"a2aDashboard": {
"loading": "جارٍ تحميل لوحة معلومات A2A...",
"confirmCancelTask": "هل تريد إلغاء المهمة@@PH0 @@؟",
"cancelTaskFailed": "فشل إلغاء المهمة.",
"cancelTaskSuccess": "تم إلغاء المهمة@@PH0 @@.",
"smokeSendFailed": "فشل إرسال/إرسال اختبار الدخان.",
"smokeSendSuccessWithTask": "رسالة/إرسال موافق (المهمة @@PH0 @@).",
"smokeSendSuccess": "أرسل رسالة/أرسل موافق.",
"smokeStreamFailed": "فشل اختبار دخان الرسالة/الدفق.",
"smokeStreamSuccessWithTask": "الرسالة/الدفق موافق (المهمة{taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "انتهت الرسالة/الدفق بدون معرف المهمة.",
"health": "الصحة",
"ok": "ok",
"totalTasks": "إجمالي المهام",
"activeStreams": "لا يوجد بث نشط...",
"lastTask": "آخر مهمة",
"taskStateOverview": "نظرة عامة على حالة المهمة",
"state": {
"submitted": "تم الإرسال",
"working": "يعمل ",
"completed": "مكتمل",
"failed": "فشل",
"cancelled": "تم الإلغاء"
},
"agentCard": "بطاقة الوكيل",
"version": "الإصدار",
"url": "الرابط الالكتروني",
"capabilities": "القدرات",
"agentCardNotAvailable": "بطاقة الوكيل غير متوفرة.",
"quickValidation": "التحقق السريع",
"quickValidationDescription": "ينفذ مكالمات الدخان من خلال نقطة النهاية الحية@@PH0 @@.",
"runMessageSend": "تشغيل الرسالة/إرسالها",
"runMessageStream": "تشغيل الرسالة/الدفق",
"taskManagement": "إدارة المهام",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "الجميع",
"allSkills": "جميع المهارات",
"loadingTasks": "تحميل المهام",
"noTasksForFilters": "لم يتم العثور على مهام لعوامل التصفية الحالية.",
"tableTask": "المهمة",
"tableSkill": "مهارة",
"tableState": "الولاية",
"tableUpdated": "تم التحديث",
"tableActions": "الإجراءات",
"view": "عرض",
"cancel": "إلغاء",
"previous": "السابق",
"next": "التالي",
"taskDetail": "تفاصيل المهمة",
"close": "إغلاق",
"metadata": "البيانات الوصفية",
"events": "الأحداث والفعاليات",
"artifacts": "الأدلة الجنائية"
},
"health": {
"title": "صحة النظام",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "اختر لونًا جاهزًا أو أنشئ سمتك الخاصة بلون واحد",
"themeCreate": "إنشاء سمة",
"themeCustom": "سمة مخصصة",
"themeCoral": "مرجاني",
"themeBlue": "أزرق",
"themeRed": "أحمر",
"themeGreen": "أخضر",
@@ -1181,7 +1441,23 @@
"stickyLimit": "الحد اللزج",
"stickyLimitDesc": "المكالمات لكل حساب قبل التبديل",
"modelAliases": "الأسماء المستعارة النموذجية",
"modelAliasesTitle": "أسماء بديلة للنماذج",
"modelAliasesDesc": "أنماط أحرف البدل لإعادة تعيين أسماء النماذج • استخدم * و؟",
"addCustomAlias": "إضافة اسم بديل مخصص",
"deprecatedModelId": "معرف النموذج المهمل",
"newModelId": "معرف النموذج الجديد",
"customAliases": "أسماء بديلة مخصصة",
"builtInAliases": "أسماء بديلة مدمجة",
"backgroundDegradationTitle": "تقليل المهام في الخلفية",
"backgroundDegradationDesc": "اكتشاف المهام في الخلفية تلقائيًا (العناوين والملخصات) وتوجيهها إلى نماذج أرخص",
"enableDegradation": "تفعيل تقليل المهام في الخلفية",
"enableDegradationHint": "عند التفعيل، يتم توجيه المهام في الخلفية مثل توليد العناوين والملخصات تلقائيًا إلى نماذج أرخص",
"tasksDetected": "المهام المكتشفة",
"degradationMap": "خريطة تقليل النماذج",
"premiumModel": "نموذج متميز",
"cheapModel": "نموذج رخيص",
"detectionPatterns": "أنماط الكشف",
"newPattern": "مثال: \"أنشئ عنوانًا\"",
"aliasPatternPlaceholder": "كلود السوناتة-*",
"aliasTargetPlaceholder": "كلود السوناتة-4-20250514",
"pattern": "نمط",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "الرموز المميزة المستخدمة لإنشاء إدخالات ذاكرة التخزين المؤقت (الرجوع إلى معدل الإدخال)",
"customPricingNote": "يمكنك تجاوز التسعير الافتراضي لنماذج محددة. تحظى التجاوزات المخصصة بالأولوية على الأسعار التي يتم اكتشافها تلقائيًا.",
"editPricing": "تحرير التسعير",
"viewFullDetails": "عرض التفاصيل الكاملة",
"modelAliasesTitle": "أسماء بديلة للنماذج",
"addCustomAlias": "إضافة اسم بديل مخصص",
"deprecatedModelId": "معرف النموذج المهمل",
"newModelId": "معرف النموذج الجديد",
"customAliases": "أسماء بديلة مخصصة",
"builtInAliases": "أسماء بديلة مدمجة",
"backgroundDegradationTitle": "تقليل المهام في الخلفية",
"backgroundDegradationDesc": "اكتشاف المهام في الخلفية تلقائيًا (العناوين والملخصات) وتوجيهها إلى نماذج أرخص",
"enableDegradation": "تفعيل تقليل المهام في الخلفية",
"enableDegradationHint": "عند التفعيل، يتم توجيه المهام في الخلفية مثل توليد العناوين والملخصات تلقائيًا إلى نماذج أرخص",
"tasksDetected": "المهام المكتشفة",
"degradationMap": "خريطة تقليل النماذج",
"premiumModel": "نموذج متميز",
"cheapModel": "نموذج رخيص",
"detectionPatterns": "أنماط الكشف",
"newPattern": "مثال: \"أنشئ عنوانًا\""
"viewFullDetails": "عرض التفاصيل الكاملة"
},
"translator": {
"title": "مترجم",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "مقدمي الخدمات",
"commonUseCases": "حالات الاستخدام الشائعة",
"clientCompatibility": "توافق العميل",
"protocolsToc": "البروتوكولات",
"apiReference": "مرجع واجهة برمجة التطبيقات",
"method": "الطريقة",
"path": "المسار",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "استخدم",
"clientClaudeBullet1Middle": "(كلود) أو",
"clientClaudeBullet1Suffix": "(مضاد الجاذبية) البادئة.",
"protocolsTitle": "البروتوكولات: MCP & A2A",
"protocolsDescription": "تعرض OmniRoute بروتوكولين تشغيليين بالإضافة إلى واجهات برمجة التطبيقات المتوافقة مع OpenAI: MCP لتنفيذ الأداة و A2A لسير العمل من وكيل إلى وكيل.",
"protocolMcpTitle": "MCP (بروتوكول السياق النموذجي)",
"protocolMcpDesc": "استخدم MCP عبر stdio للسماح للعملاء باكتشاف أدوات OmniRoute والاتصال بها مع رؤية التدقيق.",
"protocolMcpStep1": "ابدأ نقل MCP باستخدام `omniroute --mcp`.",
"protocolMcpStep2": "قم بتوجيه عميل MCP الخاص بك إلى STDIO TRANSPORT.",
"protocolMcpStep3": "اتصل بـ `omniroute_get_health` و `omniroute_list_combos` للتحقق من الاتصال.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "استخدم A2A JSON - RPC لإرسال المهام بشكل متزامن أو عبر بث SSE.",
"protocolA2aStep1": "اقرأ `/.well-known/agent.json` لاكتشاف الوكيل.",
"protocolA2aStep2": "إرسال طلبات @@PH0 @@ أو `message/stream` إلى `POST /a2a`.",
"protocolA2aStep3": "إدارة دورة حياة المهمة باستخدام @@PH0 @@ و `tasks/cancel`.",
"protocolTroubleshootingTitle": "استكشاف أخطاء البروتوكول وإصلاحها",
"protocolTroubleshooting1": "إذا كانت حالة MCP غير متصلة بالإنترنت، فتحقق من تشغيل عملية stdio وتحديث ملف نبضات القلب.",
"protocolTroubleshooting2": "إذا بقيت مهام A2A في `working`، فافحص `/api/a2a/tasks/:id` ودفق الأحداث للحالة الطرفية.",
"protocolTroubleshooting3": "استخدم `/dashboard/mcp` و `/dashboard/a2a` لعناصر التحكم التشغيلية ورؤية التدقيق.",
"endpointChatNote": "نقطة نهاية الدردشة المتوافقة مع OpenAI (افتراضي).",
"endpointResponsesNote": "نقطة نهاية واجهة برمجة التطبيقات للاستجابات (Codex، o-series).",
"endpointModelsNote": "كتالوج نموذجي لجميع مقدمي الخدمات المتصلين.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "يتم توفير OmniRoute \"كما هو\" دون أي ضمان من أي نوع. نحن لسنا مسؤولين عن أي تكاليف يتم تكبدها من خلال استخدام واجهة برمجة التطبيقات (API)، أو انقطاع الخدمة، أو فقدان البيانات. احتفظ دائمًا بنسخ احتياطية من التكوين الخاص بك.",
"termsSection6Title": "6. المصدر المفتوح",
"termsSection6Text": "OmniRoute هو برنامج مفتوح المصدر. ولك الحرية في فحصه وتعديله وتوزيعه بموجب شروط ترخيصه."
},
"media": {
"title": "استوديو الوسائط",
"subtitle": "أنشئ صورًا وفيديوهات وموسيقى",
"model": "Model",
"prompt": "Prompt",
"generate": "إنشاء",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "здраве",
"limits": "Ограничения и квоти",
"cliTools": "CLI инструменти",
"media": "Медия",
"settings": "Настройки",
"translator": "Преводач",
"docs": "Документи",
"issues": "Проблеми",
"endpoint": "Крайна точка",
"mcp": "MCP",
"a2a": "A2а",
"apiManager": "API мениджър",
"logs": "трупи",
"auditLog": "Дневник за одит",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Прокси сървърът е спрян или се рестартира.",
"expandSidebar": "Разширете страничната лента",
"collapseSidebar": "Свиване на страничната лента",
"media": "Медия"
"themes": "Теми",
"presetColors": "Популярни цветове",
"createTheme": "Създай нова тема",
"chooseColor": "Изберете един цвят",
"themeCoral": "КоралName",
"themeBlue": "Сини",
"themeRed": "Червен",
"themeGreen": "Зелено",
"themeViolet": "Виолетово",
"themeOrange": "Оранжево",
"themeCyan": "Циан"
},
"themesPage": {
"title": "Теми",
"description": "Изберете предварително зададена тема или създайте своя собствена с един цвят",
"presetColors": "Популярни цветове",
"customTheme": "Персонализирана тема",
"customThemeDesc": "Щракнете върху създаване на тема и изберете един цвят",
"createTheme": "Създай нова тема",
"activePreset": "Активна тема"
},
"header": {
"logout": "Изход",
@@ -108,10 +130,18 @@
"homeDescription": "Добре дошли в OmniRoute",
"endpoint": "Крайна точка",
"endpointDescription": "Конфигурация на крайна точка на API",
"mcp": "Управление на MCP",
"mcpDescription": "Наблюдавайте процеса, инструментите и оперативния контрол на MCP сървъра",
"a2a": "Управление на A2A",
"a2aDescription": "Наблюдавайте статуса, задачите и стрийминг дейността на Agent2Agent",
"settings": "Настройки",
"settingsDescription": "Управлявайте вашите предпочитания",
"openaiCompatible": "Съвместим с OpenAI",
"anthropicCompatible": "Антропно съвместим"
"anthropicCompatible": "Антропно съвместим",
"media": "Медия",
"mediaDescription": "Генериране на изображения, видеоклипове и музика",
"themes": "Теми",
"themesDescription": "Изберете цветова тема за целия панел на таблото"
},
"home": {
"quickStart": "Бърз старт",
@@ -261,6 +291,21 @@
"showing": "Показани са {count} записи (отместване {offset})",
"previous": "Предишен"
},
"media": {
"title": "Медиен център",
"subtitle": "Генерирайте изображения, видеа и музика",
"model": "Model",
"prompt": "Prompt",
"generate": "Генерирай",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI инструменти",
"noActiveProviders": "Няма активни доставчици",
@@ -533,7 +578,75 @@
"saving": "Запазва се...",
"weighted": "Претеглени",
"leastUsed": "Най-малко използван",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "Как да използвате тази стратегия",
"strategyGuideWhen": "Кога да използва!",
"strategyGuideAvoid": "Избягвайте кога",
"strategyGuideExample": "Пример",
"strategyGuide": {
"priority": {
"when": "Имате един предпочитан модел и искате резервен вариант само при неуспех.",
"avoid": "Нуждаете се от разпределение на заявките между моделите.",
"example": "Основен модел на кодиране с по - евтино резервно копие за прекъсвания."
},
"weighted": {
"when": "Нуждаете се от контролиран трафик, разпределен между моделите.",
"avoid": "Не можете да поддържате точни тегла във времето.",
"example": "80% стабилен модел + 20% внедряване на канарския модел."
},
"round-robin": {
"when": "Искате предвидимо и равномерно разпределение.",
"avoid": "Моделите се различават твърде много по латентност или цена.",
"example": "Един и същ модел на няколко акаунта за разпределяне на производителността."
},
"random": {
"when": "Искате просто разпределение с минимална настройка.",
"avoid": "Трябват ви строги гаранции за движение по пътищата.",
"example": "Бързо прототипиране с еквивалентни модели."
},
"least-used": {
"when": "Искате адаптивно балансиране въз основа на търсенето в реално време.",
"avoid": "Трафикът е твърде нисък, за да се възползвате от балансиране на използването.",
"example": "Смесени натоварвания, при които един модел често се претоварва."
},
"cost-optimized": {
"when": "Намаляването на разходите е вашият основен приоритет.",
"avoid": "Ценовите данни липсват или са остарели.",
"example": "Задачи на заден фон или партида, при които се предпочитат по - ниски разходи."
}
},
"advancedHelp": {
"maxRetries": "Колко повторни опита се правят, преди заявката да бъде неуспешна.",
"retryDelay": "Първоначално изчакване между опитите. По - високите стойности намаляват налягането на разрушаване.",
"timeout": "Максимална продължителност на заявката преди прекъсване.",
"healthcheck": "Пропуска нездравословни модели/доставчици от решенията за маршрутизиране.",
"concurrencyPerModel": "Позволени са максимум едновременни заявки за модел в кръгъл робин.",
"queueTimeout": "Колко дълго може да чака заявката на опашката, преди да изтече времето."
},
"templatesTitle": "Бързи шаблони",
"templatesDescription": "Приложете стартов профил, след това регулирайте моделите и конфигурирайте.",
"templateApply": "Прилагане на шаблон...",
"templateHighAvailability": "Висока заетост",
"templateHighAvailabilityDesc": "Приоритетно маршрутизиране със здравни проверки и безопасни повторни опити.",
"templateCostSaver": "Пестене на разходи",
"templateCostSaverDesc": "Оптимизирано по отношение на разходите маршрутизиране за първостепенни за бюджета натоварвания.",
"templateBalanced": "симетрично натоварване",
"templateBalancedDesc": "Най - малко използвано маршрутизиране за разпространение на търсенето с течение на времето.",
"usageGuideHide": "Скриване на шаблона",
"usageGuideDontShowAgain": "Не показвай това отново",
"usageGuideShow": "Показване на ръководството",
"quickTestTitle": "Комбо готов за валидиране",
"quickTestDescription": "Извършете тест сега, за да потвърдите поведението на резервите и латентността.",
"testNow": "Тествайте сега",
"pricingCoverage": "Покритие на цените",
"pricingCoverageHint": "Оптимизирането на разходите работи най - добре, когато всички комбинирани модели имат ценообразуване.",
"pricingAvailable": "Налично ценообразуване",
"pricingMissing": "Без ценообразуване",
"pricingAvailableShort": "цени",
"pricingMissingShort": "без цена",
"warningRoundRobinSingleModel": "Round - robin е най - полезен с поне 2 модела.",
"warningCostOptimizedPartialPricing": "Само {priced} от {total} моделите имат ценообразуване. Маршрутизирането може да бъде частично съобразено с разходите.",
"warningCostOptimizedNoPricing": "Няма намерени данни за ценообразуване за тази комбинация. Оптимизираният по отношение на разходите маршрут може да е неочакван."
},
"costs": {
"title": "Разходи",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Преобразувайте текст в естествено звучаща реч",
"moderations": "Модерации",
"moderationsDesc": "Модериране на съдържанието и класификация за безопасност",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Основни API",
"categoryMedia": "Медии и мултимодални",
"categoryUtility": "Помощни средства и управление",
"enableCloudTitle": "Активиране на облачен прокси",
"whatYouGet": "Какво ще получите",
"cloudBenefitAccess": "Достъп до вашия API от всяка точка на света",
@@ -613,13 +733,154 @@
"image": "Изображение",
"custom": "обичай",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Основни API",
"categoryMedia": "Медии и мултимодални",
"categoryUtility": "Помощни средства и управление"
"sectionTitle": "Интеграционна повърхност",
"sectionDescription": "Съвместими с OpenAI API и крайни точки на оперативния протокол",
"tabApis": "API, съвместими с OpenAI",
"tabProtocols": "Протоколи",
"tabsAria": "Раздели на крайните точки",
"protocolsTitle": "Протоколи",
"protocolsDescription": "MCP и A2A са първокласни крайни точки със специална наблюдаемост и контроли.",
"mcpCardTitle": "MCP сървър",
"mcpCardDescription": "Модел Контекстен протокол през stdio",
"a2aCardTitle": "A2A сървър",
"a2aCardDescription": "Agent2Agent JSON - RPC крайна точка",
"protocolToolsLabel": "Инструменти",
"protocolTasksLabel": "Задачи",
"protocolActiveStreamsLabel": "Активни потоци",
"protocolLastActivity": "Последна активност",
"quickStart": "Button text: start playing a game",
"openMcpDashboard": "Отворено управление на MCP",
"openA2aDashboard": "Отворено управление на A2A",
"mcpQuickStartTitle": "Button text: start playing a game",
"mcpQuickStartStep1": "Стартирайте MCP сървъра чрез `omniroute --mcp`.",
"mcpQuickStartStep2": "Конфигурирайте MCP клиента си, за да се свързвате през stdio транспорт.",
"mcpQuickStartStep3": "Използвайте инструменти като @@ PH0 @@ и @@PH1 @@.",
"a2aQuickStartTitle": "Button text: start playing a game",
"a2aQuickStartStep1": "Открийте картата на агента на @@PH0 @@.",
"a2aQuickStartStep2": "Изпратете JSON - RPC заявки до@@ PH0 @@, като използвате @@ PH1 @@ или @@ PH2 @@.",
"a2aQuickStartStep3": "Проследяване и контрол на задачите с помощта на @@ PH0 @@ и @@ PH1 @@."
},
"mcpDashboard": {
"loading": "Зареждане на таблото за управление на MCP...",
"activate": "активиране",
"deactivate": "деактивирай",
"confirmSwitchCombo": "Потвърждаване на@@ PH0@@ комбо „@@ PH1 @@“?",
"switchComboFailed": "Неуспешно превключване на състоянието на комбинацията.",
"switchComboSuccess": "Комбото „@@ PH0@@“ е актуализирано.",
"confirmApplyProfile": "Прилагане на профил за устойчивост „@@ PH0 @@“?",
"applyProfileFailed": "Неуспешно прилагане на профил на устойчивост.",
"applyProfileSuccess": "Приложен е профил „@@ PH0 @@“.",
"confirmResetBreakers": "Нулиране на всички прекъсвачи?",
"resetBreakersFailed": "Неуспешно нулиране на прекъсвачите.",
"resetBreakersSuccess": "Прекъсвачите се нулират.",
"processStatus": "Статус на процеса",
"online": "Онлайн",
"offline": "Извън линия",
"pid": "ПИДprocess heading",
"sessionUptime": "Продължителност на сесията",
"lastHeartbeat": "Последен сърдечен ритъм",
"activity24h": "Дейност (24 часа)",
"totalCalls": "Общо повиквания",
"successRate": "Ниво на успех* %",
"avgLatency": "Ср. латентност",
"topTools": "Топ инструменти",
"noToolCalls24h": "Няма повиквания от инструмента през последните 24 часа.",
"runtimeDetails": "Подробности за времето на изпълнение",
"transport": "Транспорт",
"scopesEnforced": "Приложени обхвати",
"yes": "да",
"no": "не",
"lastCall": "ПОСЛЕДНО ПОВИКВАНЕ!&#10;",
"heartbeatPath": "Пътека на сърдечния ритъм",
"operationalControls": "Оперативен контрол",
"switchCombo": "Превключване на комбинацията",
"inactive": "неактивни",
"active": "активен",
"activateCombo": "Активиране на комбинацията",
"deactivateCombo": "Деактивиране на комбинацията",
"applyResilienceProfile": "Прилагане на профил на устойчивост",
"profileAggressive": "агресивно",
"profileBalanced": "Балансиран",
"profileConservative": "консервативен",
"applyProfile": "Прилагане на профил",
"resetCircuitBreakers": "Нулиране на прекъсвачите",
"resetCircuitBreakersHelp": "Изчиства текущото състояние на прекъсвача и броячите на повреди за доставчиците.",
"resetAllBreakers": "Нулиране на всички прекъсвачи",
"toolsAndScopes": "Инструменти и прибори",
"tableTool": "Инструмент",
"tableScopes": "Обхват",
"tablePhase": "Фаза",
"tableAudit": "Одит",
"auditLog": "Архив",
"auditSummary": "Обаждания: @@ PH0 @@ | page {page} от {totalPages}",
"allTools": "Всички инструменти",
"allResults": "Всички резултати",
"success": "Готово",
"failure": "Грешка",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Зареждане на записи от одита...",
"noAuditEntriesForFilters": "Няма намерени записи за одит за текущите филтри.",
"tableTimestamp": "Времево клеймо",
"tableDuration": "Продължителност",
"tableResult": "Резултат",
"tableApiKey": "Ключ за API",
"failed": "неуспешно",
"previous": "Предишна",
"next": "Следващ"
},
"a2aDashboard": {
"loading": "Зареждане на таблото за управление на A2A...",
"confirmCancelTask": "Отмяна на задача @@PH0 @@?",
"cancelTaskFailed": "Неуспешно анулиране на задачата.",
"cancelTaskSuccess": "Задачата {taskId} е отменена.",
"smokeSendFailed": "неуспешен тест за дим на съобщение/изпращане.",
"smokeSendSuccessWithTask": "съобщение/изпращане ОК (задача@@ PH0 @@).",
"smokeSendSuccess": "съобщение/изпращане ОК.",
"smokeStreamFailed": "неуспешен тест за дим на съобщение/поток.",
"smokeStreamSuccessWithTask": "съобщение/поток ОК (задача {taskId}@@ PH1 @@).",
"smokeStreamNoTaskId": "съобщението/потока е завършено без идентификатор на задачата.",
"health": "Здраве",
"ok": "ОК",
"totalTasks": "Общо задачи",
"activeStreams": "Активни потоци",
"lastTask": "Последна задача",
"taskStateOverview": "Общ преглед на състоянието на задачата",
"state": {
"submitted": "Публикувано от",
"working": "Изправно",
"completed": "завършено",
"failed": "неуспешно",
"cancelled": "отказанa"
},
"agentCard": "Агентска карта",
"version": "Версия",
"url": "URL",
"capabilities": "Възможности",
"agentCardNotAvailable": "Картата на агента не е налична.",
"quickValidation": "Бързо валидиране",
"quickValidationDescription": "Изпълнява димни повиквания чрез крайната точка на живо@@ PH0 @@.",
"runMessageSend": "Стартиране на съобщение/изпращане",
"runMessageStream": "Стартиране на съобщение/поток",
"taskManagement": "Управление на задачи",
"taskSummary": "{total} задачи | страница {page} от {totalPages}",
"allStates": "всички",
"allSkills": "всички умения",
"loadingTasks": "Зареждане на задачите...",
"noTasksForFilters": "Не са намерени задачи за текущите филтри.",
"tableTask": "Задача",
"tableSkill": "Умение",
"tableState": "Държава",
"tableUpdated": "Обновенo на",
"tableActions": "Действия",
"view": "Виж",
"cancel": "Отказ",
"previous": "Предишна",
"next": "Следващ",
"taskDetail": "Подробности за задачата",
"close": "Затваряне",
"metadata": "Метаданни",
"events": "Събития",
"artifacts": "Артефакти"
},
"health": {
"title": "Здраве на системата",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Изберете готов цвят или създайте своя тема с един цвят",
"themeCreate": "Създай тема",
"themeCustom": "Персонална тема",
"themeCoral": "Коралов",
"themeBlue": "Син",
"themeRed": "Червен",
"themeGreen": "Зелен",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Лепкава граница",
"stickyLimitDesc": "Обаждания на акаунт преди превключване",
"modelAliases": "Псевдоними на модела",
"modelAliasesTitle": "Псевдоними на модели",
"modelAliasesDesc": "Шаблони за заместващи символи за пренасочване на имена на модели • Използвайте * и ?",
"addCustomAlias": "Добави потребителски псевдоним",
"deprecatedModelId": "Остарял ID на модел",
"newModelId": "Нов ID на модел",
"customAliases": "Потребителски псевдоними",
"builtInAliases": "Вградени псевдоними",
"backgroundDegradationTitle": "Деградация на фонови задачи",
"backgroundDegradationDesc": "Автоматично открива фонови задачи (заглавия, резюмета) и пренасочва към по-евтини модели",
"enableDegradation": "Активирай деградация на фонови задачи",
"enableDegradationHint": "Когато е активирано, фоновите задачи като генериране на заглавия и резюмета се пренасочват автоматично към по-евтини модели",
"tasksDetected": "Открити задачи",
"degradationMap": "Карта на деградация на модели",
"premiumModel": "Премиум модел",
"cheapModel": "Евтин модел",
"detectionPatterns": "Модели за откриване",
"newPattern": "напр. \"генерирай заглавие\"",
"aliasPatternPlaceholder": "клод-сонет-*",
"aliasTargetPlaceholder": "клод-сонет-4-20250514",
"pattern": "Модел",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Токени, използвани за създаване на записи в кеша (резервен към скоростта на въвеждане)",
"customPricingNote": "Можете да замените цените по подразбиране за конкретни модели. Персонализираните замени имат приоритет пред автоматично разпознатото ценообразуване.",
"editPricing": "Редактиране на цените",
"viewFullDetails": "Вижте пълните подробности",
"modelAliasesTitle": "Псевдоними на модели",
"addCustomAlias": "Добави потребителски псевдоним",
"deprecatedModelId": "Остарял ID на модел",
"newModelId": "Нов ID на модел",
"customAliases": "Потребителски псевдоними",
"builtInAliases": "Вградени псевдоними",
"backgroundDegradationTitle": "Деградация на фонови задачи",
"backgroundDegradationDesc": "Автоматично открива фонови задачи (заглавия, резюмета) и пренасочва към по-евтини модели",
"enableDegradation": "Активирай деградация на фонови задачи",
"enableDegradationHint": "Когато е активирано, фоновите задачи като генериране на заглавия и резюмета се пренасочват автоматично към по-евтини модели",
"tasksDetected": "Открити задачи",
"degradationMap": "Карта на деградация на модели",
"premiumModel": "Премиум модел",
"cheapModel": "Евтин модел",
"detectionPatterns": "Модели за откриване",
"newPattern": "напр. \"генерирай заглавие\""
"viewFullDetails": "Вижте пълните подробности"
},
"translator": {
"title": "Преводач",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Доставчици",
"commonUseCases": "Обичайни случаи на употреба",
"clientCompatibility": "Съвместимост на клиента",
"protocolsToc": "Протоколи",
"apiReference": "Справка за API",
"method": "Метод",
"path": "Пътека",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Използвайте",
"clientClaudeBullet1Middle": "(Клод) или",
"clientClaudeBullet1Suffix": "(Антигравитация) префикс.",
"protocolsTitle": "Протоколи: MCP & A2A",
"protocolsDescription": "OmniRoute излага два оперативни протокола в допълнение към съвместимите с OpenAI API: MCP за изпълнение на инструменти и A2A за работни процеси от агент към агент.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Използвайте MCP през stdio, за да позволите на клиентите да открият и извикат OmniRoute инструменти с видимост на одита.",
"protocolMcpStep1": "Започнете MCP транспорт с @@PH0 @@.",
"protocolMcpStep2": "Насочете вашия MCP клиент към stdio Transport.",
"protocolMcpStep3": "Обадете се на @@ PH0 @@ и `omniroute_list_combos`, за да потвърдите връзката.",
"protocolA2aTitle": "A2A (Агент2Агент)",
"protocolA2aDesc": "Използвайте A2A JSON - RPC, за да изпращате задачи синхронно или чрез стрийминг на SSE.",
"protocolA2aStep1": "Прочетете `/.well-known/agent.json` за откриване на агент.",
"protocolA2aStep2": "Изпратете `message/send` или `message/stream` заявки на @@PH2 @@.",
"protocolA2aStep3": "Управлявайте жизнения цикъл на задачите с@@ PH0 @@ и @@ PH1 @@.",
"protocolTroubleshootingTitle": "Отстраняване на неизправности в протокола",
"protocolTroubleshooting1": "Ако MCP статусът е офлайн, проверете дали процесът STDIO работи и дали файлът със сърдечния ритъм се актуализира.",
"protocolTroubleshooting2": "Ако A2A задачите останат в `working`, проверете @@ PH1@@ и стриймвайте събития за състоянието на терминала.",
"protocolTroubleshooting3": "Използвайте `/dashboard/mcp` и @@ PH1@@ за оперативен контрол и видимост на одита.",
"endpointChatNote": "OpenAI-съвместима крайна точка за чат (по подразбиране).",
"endpointResponsesNote": "Крайна точка на API за отговори (Кодекс, o-серия).",
"endpointModelsNote": "Модел каталог за всички свързани доставчици.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute се предоставя „както е“ без каквато и да е гаранция. Ние не носим отговорност за каквито и да било разходи, възникнали поради използване на API, прекъсвания на услугата или загуба на данни. Винаги поддържайте резервни копия на вашата конфигурация.",
"termsSection6Title": "6. Отворен код",
"termsSection6Text": "OmniRoute е софтуер с отворен код. Вие сте свободни да го инспектирате, модифицирате и разпространявате съгласно условията на неговия лиценз."
},
"media": {
"title": "Медиен център",
"subtitle": "Генерирайте изображения, видеа и музика",
"model": "Model",
"prompt": "Prompt",
"generate": "Генерирай",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Sundhed",
"limits": "Grænser og kvoter",
"cliTools": "CLI værktøjer",
"media": "Medier",
"settings": "Indstillinger",
"translator": "Oversætter",
"docs": "Dokumenter",
"issues": "Problemer",
"endpoint": "Slutpunkt",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API Manager",
"logs": "Logs",
"auditLog": "Revisionslog",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Proxyserveren er blevet stoppet eller genstarter.",
"expandSidebar": "Udvid sidebjælken",
"collapseSidebar": "Skjul sidebjælken",
"media": "Medier"
"themes": "Temaer",
"presetColors": "Populære farver",
"createTheme": "Opret nyt tema...",
"chooseColor": "Vælg én farve",
"themeCoral": "Coral",
"themeBlue": "Blå",
"themeRed": "Rød",
"themeGreen": "Grøn",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Turkis"
},
"themesPage": {
"title": "Temaer",
"description": "Vælg et forudindstillet tema, eller opret dit eget med en enkelt farve",
"presetColors": "Populære farver",
"customTheme": "Brugerdefineret tema",
"customThemeDesc": "Klik på Opret tema, og vælg en farve",
"createTheme": "Opret nyt tema...",
"activePreset": "Aktiv theme"
},
"header": {
"logout": "Log ud",
@@ -108,10 +130,18 @@
"homeDescription": "Velkommen til OmniRoute",
"endpoint": "Slutpunkt",
"endpointDescription": "API-endepunktskonfiguration",
"mcp": "MCP-administration",
"mcpDescription": "Overvåg MCP-serverproces, værktøjer og driftskontroller",
"a2a": "A2A Management",
"a2aDescription": "Overvåg Agent2Agent-status, opgaver og streamingaktivitet",
"settings": "Indstillinger",
"settingsDescription": "Administrer dine præferencer",
"openaiCompatible": "OpenAI-kompatibel",
"anthropicCompatible": "Antropisk kompatibel"
"anthropicCompatible": "Antropisk kompatibel",
"media": "Medie",
"mediaDescription": "Generer billeder, videoer og musik",
"themes": "Temaer",
"themesDescription": "Vælg et farvetema til hele dashboardpanelet"
},
"home": {
"quickStart": "Hurtig start",
@@ -261,6 +291,21 @@
"showing": "Viser {count} poster (offset {offset})",
"previous": "Forrige"
},
"media": {
"title": "Medieværksted",
"subtitle": "Generér billeder, videoer og musik",
"model": "Model",
"prompt": "Prompt",
"generate": "Generer",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI værktøjer",
"noActiveProviders": "Ingen aktive udbydere",
@@ -533,7 +578,75 @@
"saving": "Gemmer...",
"weighted": "Vægtet",
"leastUsed": "Mindst brugt",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "Sådan bruger du denne strategi",
"strategyGuideWhen": "ANVENDELSE",
"strategyGuideAvoid": "Undgå når",
"strategyGuideExample": "Eksempel",
"strategyGuide": {
"priority": {
"when": "Du har én foretrukken model og ønsker kun at falde tilbage på fejl.",
"avoid": "Du skal anmode om fordeling på tværs af modeller.",
"example": "Primær kodningsmodel med billigere backup for nedbrud."
},
"weighted": {
"when": "Du har brug for kontrolleret trafik fordelt på modeller.",
"avoid": "Du kan ikke opretholde nøjagtige vægte over tid.",
"example": "80% stabil model + 20% kanariefugl model udrulning."
},
"round-robin": {
"when": "Du ønsker forudsigelig og jævn fordeling.",
"avoid": "Modeller afviger for meget i latens eller omkostninger.",
"example": "Samme model på flere konti for at sprede gennemløb."
},
"random": {
"when": "Du ønsker enkel distribution med minimal opsætning.",
"avoid": "Du har brug for strenge trafikgarantier.",
"example": "Hurtig prototyping med ækvivalente modeller."
},
"least-used": {
"when": "Du vil have adaptiv balancering baseret på live-efterspørgsel.",
"avoid": "Trafikken er for lav til at drage fordel af brugsbalancering.",
"example": "Blandede arbejdsbelastninger, hvor en model ofte bliver overbelastet."
},
"cost-optimized": {
"when": "Omkostningsreduktion er din højeste prioritet.",
"avoid": "Prissætningsdata mangler eller er forældede.",
"example": "Baggrunds- eller batchjob, hvor lavere omkostninger foretrækkes."
}
},
"advancedHelp": {
"maxRetries": "Hvor mange forsøg der forsøges igen, før en anmodning mislykkes.",
"retryDelay": "Indledende ventetid mellem genforsøg. Højere værdier reducerer sprængningstrykket.",
"timeout": "Maksimal anmodningsvarighed før afbrydelse.",
"healthcheck": "Skipper usunde modeller/udbydere fra dirigeringsbeslutninger.",
"concurrencyPerModel": "Maks. tilladte samtidige anmodninger pr. model i round-robin.",
"queueTimeout": "Hvor længe en anmodning kan vente i kø, før den udløber."
},
"templatesTitle": "Hurtige skabeloner",
"templatesDescription": "Anvend en startprofil, og juster derefter modeller og konfiguration.",
"templateApply": "Anvend skabelon",
"templateHighAvailability": "Høj tilgængelighed",
"templateHighAvailabilityDesc": "Prioriteret routing med sundhedstjek og sikre forsøg.",
"templateCostSaver": "Omkostningsbesparende",
"templateCostSaverDesc": "Omkostningsoptimeret routing til budget-første arbejdsbelastning.",
"templateBalanced": "symmetrisk belastning",
"templateBalancedDesc": "Minst anvendte routing for at sprede efterspørgslen over tid.",
"usageGuideHide": "Skjul",
"usageGuideDontShowAgain": "Vis ikke dette igen",
"usageGuideShow": "Vis guide",
"quickTestTitle": "Kombination klar til validering",
"quickTestDescription": "Kør en test nu for at bekræfte fallback og latensadfærd.",
"testNow": "Test Nu",
"pricingCoverage": "Prisdækning",
"pricingCoverageHint": "Omkostningsoptimeret fungerer bedst, når alle kombinationsmodeller har priser.",
"pricingAvailable": "Prissætning tilgængelig",
"pricingMissing": "Ingen prissætning",
"pricingAvailableShort": "Det er mere forankret i den reelle situati­",
"pricingMissingShort": "ingen pris",
"warningRoundRobinSingleModel": "Round-robin er mest nyttig med mindst 2 modeller.",
"warningCostOptimizedPartialPricing": "Kun {priced} af {total}-modeller har priser. Routing kan være delvist omkostningsbevidst.",
"warningCostOptimizedNoPricing": "Der blev ikke fundet nogen prisdata for denne kombination. Omkostningsoptimeret kan rute uventet."
},
"costs": {
"title": "Omkostninger",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Konverter tekst til naturligt klingende tale",
"moderations": "Moderationer",
"moderationsDesc": "Indholdsmoderering og sikkerhedsklassificering",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Kerne-API'er",
"categoryMedia": "Medier & Multi-Modal",
"categoryUtility": "Værktøjer & Administration",
"enableCloudTitle": "Aktiver Cloud Proxy",
"whatYouGet": "Hvad du får",
"cloudBenefitAccess": "Få adgang til din API fra hvor som helst i verden",
@@ -613,13 +733,154 @@
"image": "Billede",
"custom": "skik",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Kerne-API'er",
"categoryMedia": "Medier & Multi-Modal",
"categoryUtility": "Værktøjer & Administration"
"sectionTitle": "Integrationsoverflade",
"sectionDescription": "OpenAI-kompatible API'er og operationelle protokolendepunkter",
"tabApis": "OpenAI-kompatible API'er",
"tabProtocols": "Protokoller",
"tabsAria": "Endepunktsafsnit",
"protocolsTitle": "Protokoller",
"protocolsDescription": "MCP og A2A er førsteklasses endepunkter med dedikeret observerbarhed og kontroller.",
"mcpCardTitle": "MCP-server",
"mcpCardDescription": "Modelkontekstprotokol over stdio",
"a2aCardTitle": "A2A-server",
"a2aCardDescription": "Agent2Agent JSON-RPC-endepunkt",
"protocolToolsLabel": "Værktøjer",
"protocolTasksLabel": "Opgaver",
"protocolActiveStreamsLabel": "Aktive streams",
"protocolLastActivity": "Seneste aktivitet",
"quickStart": "Kom hurtigt i gang",
"openMcpDashboard": "Åbn MCP-administration",
"openA2aDashboard": "Åbn A2A-administration",
"mcpQuickStartTitle": "Hurtig start",
"mcpQuickStartStep1": "Kør MCP-serveren via`omniroute --mcp`.",
"mcpQuickStartStep2": "Konfigurer din MCP-klient til at forbinde over stdio-transport.",
"mcpQuickStartStep3": "Påkald værktøjer som `omniroute_get_health` og `omniroute_list_combos`.",
"a2aQuickStartTitle": "Hurtig start",
"a2aQuickStartStep1": "Find agentkortet på`/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC-anmodninger til`POST /a2a`vedhjælp af `message/send` eller `message/stream`.",
"a2aQuickStartStep3": "Spor og kontroller opgaver ved hjælp af `tasks/get` og `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Indlæser MCP-dashboard...",
"activate": "aktivér",
"deactivate": "deaktiver",
"confirmSwitchCombo": "Bekræft {action} combo \"{combo}\"?",
"switchComboFailed": "Kunne ikke skifte kombinationstilstand.",
"switchComboSuccess": "Kombinationen \"{combo}\" er opdateret.",
"confirmApplyProfile": "Vil du anvende modstandsdygtighedsprofilen \"{profile}\"?",
"applyProfileFailed": "Kunne ikke anvende modstandsdygtighedsprofil.",
"applyProfileSuccess": "Profil \"{profile}\" er anvendt.",
"confirmResetBreakers": "Nulstil alle afbrydere?",
"resetBreakersFailed": "Kunne ikke nulstille afbrydere.",
"resetBreakersSuccess": "Afbrydere nulstilles.",
"processStatus": "Processtatus.",
"online": "Online",
"offline": "Offline",
"pid": "Underlivsbetaendelse",
"sessionUptime": "Sessionens oppetid",
"lastHeartbeat": "Sidste hjerteslag",
"activity24h": "Aktivitet (24 timer)",
"totalCalls": "Samlede kald",
"successRate": "54 IE/kg)",
"avgLatency": "Gns. ventetid",
"topTools": "Topværktøjer",
"noToolCalls24h": "Ingen værktøjsopkald inden for de sidste 24 timer.",
"runtimeDetails": "Kørselsoplysninger",
"transport": "Transport",
"scopesEnforced": "Omfang håndhævet",
"yes": "ja",
"no": "nej",
"lastCall": "Sidste opkald",
"heartbeatPath": "Hjerteslagssti",
"operationalControls": "Driftskontrol",
"switchCombo": "Skift combo",
"inactive": "inaktiv",
"active": "aktiv",
"activateCombo": "Aktiver combo",
"deactivateCombo": "Deaktiver combo",
"applyResilienceProfile": "Anvend modstandsdygtighedsprofil",
"profileAggressive": "aggressive",
"profileBalanced": "afbalanceret",
"profileConservative": "konservative",
"applyProfile": "Anvend profil",
"resetCircuitBreakers": "Nulstil afbrydere",
"resetCircuitBreakersHelp": "Rydder den aktuelle afbrydertilstand og fejltællere for udbydere.",
"resetAllBreakers": "Nulstil alle afbrydere",
"toolsAndScopes": "Værktøjer og scopes",
"tableTool": "Værktøj",
"tableScopes": "Omfang",
"tablePhase": "Fase",
"tableAudit": "Revision",
"auditLog": "Revisionslog",
"auditSummary": "Opkald: {total} | side {page} af {totalPages}",
"allTools": "Alle værktøjer",
"allResults": "Alle resultater",
"success": "Succes",
"failure": "Fejl",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Indlæser revisionsposter...",
"noAuditEntriesForFilters": "Ingen revisionsposter fundet for aktuelle filtre.",
"tableTimestamp": "Tidsstempel",
"tableDuration": "Varighed",
"tableResult": "Resultat",
"tableApiKey": "API nøgle",
"failed": "mislykkedes",
"previous": "Forrige",
"next": "Næste"
},
"a2aDashboard": {
"loading": "Indlæser A2A-dashboard...",
"confirmCancelTask": "Vil du annullere opgave {taskId}?",
"cancelTaskFailed": "Opgaven kunne ikke annulleres.",
"cancelTaskSuccess": "Opgave {taskId} annulleret.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Aktive streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "afsluttet",
"failed": "mislykkedes",
"cancelled": "annulleret"
},
"agentCard": "Agentkort",
"version": "Version",
"url": "URL",
"capabilities": "Evner",
"agentCardNotAvailable": "Agentkort er ikke tilgængeligt.",
"quickValidation": "Hurtig validering",
"quickValidationDescription": "Udfører røgopkald gennem live `/a2a` slutpunktet.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Handlinger",
"view": "Udsigt",
"cancel": "Ophæve",
"previous": "Forrige",
"next": "Næste",
"taskDetail": "Opgavedetaljer",
"close": "Tæt",
"metadata": "Metadata",
"events": "Begivenheder",
"artifacts": "Artefakter"
},
"health": {
"title": "Systemsundhed",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Vælg en forudindstillet farve eller opret dit eget tema med én farve",
"themeCreate": "Opret tema",
"themeCustom": "Brugerdefineret tema",
"themeCoral": "Koral",
"themeBlue": "Blå",
"themeRed": "Rød",
"themeGreen": "Grøn",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Sticky Limit",
"stickyLimitDesc": "Opkald pr. konto før skift",
"modelAliases": "Model aliaser",
"modelAliasesTitle": "Model Aliaser",
"modelAliasesDesc": "Wildcard-mønstre til omlægning af modelnavne • Brug * og ?",
"addCustomAlias": "Tilføj Tilpasset Alias",
"deprecatedModelId": "Forældet model-ID",
"newModelId": "Nyt model-ID",
"customAliases": "Tilpassede Aliaser",
"builtInAliases": "Indbyggede Aliaser",
"backgroundDegradationTitle": "Baggrundsopgave Degradering",
"backgroundDegradationDesc": "Opdager automatisk baggrundsopgaver (titler, resuméer) og dirigerer til billigere modeller",
"enableDegradation": "Aktiver Baggrundsdegradation",
"enableDegradationHint": "Når aktiveret, dirigeres baggrundsopgaver som titelgenerering og resuméer automatisk til billigere modeller",
"tasksDetected": "Opgaver opdaget",
"degradationMap": "Modeldegraderingsschema",
"premiumModel": "Premium model",
"cheapModel": "Billig model",
"detectionPatterns": "Detektionsmønstre",
"newPattern": "f.eks. \"generer en titel\"",
"aliasPatternPlaceholder": "claude-sonnet-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Mønster",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Tokens, der bruges til at oprette cacheposter (tilbage til inputhastighed)",
"customPricingNote": "Du kan tilsidesætte standardpriser for specifikke modeller. Tilpassede tilsidesættelser har prioritet frem for automatisk registrerede priser.",
"editPricing": "Rediger prissætning",
"viewFullDetails": "Se alle detaljer",
"modelAliasesTitle": "Model Aliaser",
"addCustomAlias": "Tilføj Tilpasset Alias",
"deprecatedModelId": "Forældet model-ID",
"newModelId": "Nyt model-ID",
"customAliases": "Tilpassede Aliaser",
"builtInAliases": "Indbyggede Aliaser",
"backgroundDegradationTitle": "Baggrundsopgave Degradering",
"backgroundDegradationDesc": "Opdager automatisk baggrundsopgaver (titler, resuméer) og dirigerer til billigere modeller",
"enableDegradation": "Aktiver Baggrundsdegradation",
"enableDegradationHint": "Når aktiveret, dirigeres baggrundsopgaver som titelgenerering og resuméer automatisk til billigere modeller",
"tasksDetected": "Opgaver opdaget",
"degradationMap": "Modeldegraderingsschema",
"premiumModel": "Premium model",
"cheapModel": "Billig model",
"detectionPatterns": "Detektionsmønstre",
"newPattern": "f.eks. \"generer en titel\""
"viewFullDetails": "Se alle detaljer"
},
"translator": {
"title": "Oversætter",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Udbydere",
"commonUseCases": "Almindelige anvendelsestilfælde",
"clientCompatibility": "Klientkompatibilitet",
"protocolsToc": "Protokoller",
"apiReference": "API-reference",
"method": "Metode",
"path": "Sti",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Brug",
"clientClaudeBullet1Middle": "(Claude) eller",
"clientClaudeBullet1Suffix": "(antityngdekraft) præfiks.",
"protocolsTitle": "Protokoller: MCP & A2A",
"protocolsDescription": "OmniRoute afslører to operationelle protokoller ud over OpenAI-kompatible API'er: MCP til værktøjsudførelse og A2A til agent-til-agent arbejdsgange.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Brug MCP over stdio til at lade klienter opdage og kalde OmniRoute-værktøjer med revisionssynlighed.",
"protocolMcpStep1": "Start MCP-transport med `omniroute --mcp`.",
"protocolMcpStep2": "Ret din MCP-klient til stdio-transport.",
"protocolMcpStep3": "Ring til `omniroute_get_health` og `omniroute_list_combos` for at validere forbindelsen.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Brug A2A JSON-RPC til at sende opgaver synkront eller via SSE-streaming.",
"protocolA2aStep1": "Læs `/.well-known/agent.json` for at finde agenter.",
"protocolA2aStep2": "Send `message/send` eller `message/stream` anmodninger til `POST /a2a`.",
"protocolA2aStep3": "Administrer opgavens livscyklus med `tasks/get` og `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protokol fejlfinding",
"protocolTroubleshooting1": "Hvis MCP-status er offline, skal du kontrollere, at stdio-processen kører, og heartbeat-filen opdateres.",
"protocolTroubleshooting2": "Hvis A2A-opgaver forbliver i `working`, inspicer `/api/a2a/tasks/:id` og stream hændelser for terminaltilstand.",
"protocolTroubleshooting3": "Brug `/dashboard/mcp` og `/dashboard/a2a` til operationelle kontroller og revisionssynlighed.",
"endpointChatNote": "OpenAI-kompatibelt chatslutpunkt (standard).",
"endpointResponsesNote": "Responses API-endepunkt (Codex, o-serien).",
"endpointModelsNote": "Modelkatalog for alle tilsluttede udbydere.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute leveres \"som den er\" uden garanti af nogen art. Vi er ikke ansvarlige for omkostninger, der påløber som følge af API-brug, serviceforstyrrelser eller tab af data. Vedligehold altid sikkerhedskopier af din konfiguration.",
"termsSection6Title": "6. Open Source",
"termsSection6Text": "OmniRoute er open source-software. Du kan frit inspicere, ændre og distribuere den i henhold til licensbetingelserne."
},
"media": {
"title": "Medieværksted",
"subtitle": "Generér billeder, videoer og musik",
"model": "Model",
"prompt": "Prompt",
"generate": "Generer",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Gesundheit",
"limits": "Limits und Quoten",
"cliTools": "CLI-Tools",
"media": "Medien",
"settings": "Einstellungen",
"translator": "Übersetzer",
"docs": "Dokumente",
"issues": "Probleme",
"endpoint": "Endpunkt",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API-Manager",
"logs": "Protokolle",
"auditLog": "Audit-Protokoll",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Der Proxyserver wurde gestoppt oder wird neu gestartet.",
"expandSidebar": "Seitenleiste erweitern",
"collapseSidebar": "Seitenleiste einklappen",
"media": "Medien"
"themes": "Themen",
"presetColors": "Beliebte Farben",
"createTheme": "Thema erstellen",
"chooseColor": "Wählen Sie eine Farbe",
"themeCoral": "Koralle",
"themeBlue": "Blau",
"themeRed": "Rot",
"themeGreen": "Grün",
"themeViolet": "Violett",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themen",
"description": "Wählen Sie ein voreingestelltes Thema oder erstellen Sie Ihr eigenes mit einer einzigen Farbe",
"presetColors": "Beliebte Farben",
"customTheme": "Benutzerdefiniertes Thema",
"customThemeDesc": "Klicken Sie auf „Thema erstellen“ und wählen Sie eine Farbe aus",
"createTheme": "Thema erstellen",
"activePreset": "Aktives Thema"
},
"header": {
"logout": "Abmelden",
@@ -108,10 +130,18 @@
"homeDescription": "Willkommen bei OmniRoute",
"endpoint": "Endpunkt",
"endpointDescription": "API-Endpunktkonfiguration",
"mcp": "MCP-Management",
"mcpDescription": "Überwachen Sie MCP-Serverprozesse, Tools und Betriebskontrollen",
"a2a": "A2A-Management",
"a2aDescription": "Überwachen Sie den Agent2Agent-Status, die Aufgaben und die Streaming-Aktivität",
"settings": "Einstellungen",
"settingsDescription": "Verwalten Sie Ihre Präferenzen",
"openaiCompatible": "OpenAI-kompatibel",
"anthropicCompatible": "Anthropic-kompatibel"
"anthropicCompatible": "Anthropic-kompatibel",
"media": "Medien",
"mediaDescription": "Generieren Sie Bilder, Videos und Musik",
"themes": "Themen",
"themesDescription": "Wählen Sie ein Farbthema für das gesamte Dashboard-Panel"
},
"home": {
"quickStart": "Schnellstart",
@@ -261,6 +291,21 @@
"showing": "Zeigt {count} Einträge (Offset {offset})",
"previous": "Zurück"
},
"media": {
"title": "Medien-Playground",
"subtitle": "Erstelle Bilder, Videos und Musik",
"model": "Model",
"prompt": "Prompt",
"generate": "Generieren",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI-Tools",
"noActiveProviders": "Keine aktiven Anbieter",
@@ -533,7 +578,75 @@
"saving": "Sparen...",
"weighted": "Gewichtet",
"leastUsed": "Am wenigsten genutzt",
"costOpt": "Kosten-Opt"
"costOpt": "Kosten-Opt",
"strategyGuideTitle": "So nutzen Sie diese Strategie",
"strategyGuideWhen": "Wann zu verwenden",
"strategyGuideAvoid": "Vermeiden Sie wann",
"strategyGuideExample": "Beispiel",
"strategyGuide": {
"priority": {
"when": "Sie haben ein bevorzugtes Modell und wollen nur im Falle eines Ausfalls auf einen Ersatz zurückgreifen.",
"avoid": "Sie benötigen eine Anforderungsverteilung über Modelle hinweg.",
"example": "Primäres Codierungsmodell mit günstigerem Backup für Ausfälle."
},
"weighted": {
"when": "Sie benötigen eine kontrollierte Aufteilung des Datenverkehrs auf alle Modelle.",
"avoid": "Sie können Ihr Gewicht nicht über einen längeren Zeitraum hinweg genau aufrechterhalten.",
"example": "80 % stabiles Modell + 20 % Rollout des kanarischen Modells."
},
"round-robin": {
"when": "Sie möchten eine vorhersehbare und gleichmäßige Verteilung.",
"avoid": "Die Modelle unterscheiden sich zu stark in der Latenz oder den Kosten.",
"example": "Gleiches Modell auf mehreren Konten, um den Durchsatz zu verteilen."
},
"random": {
"when": "Sie möchten eine einfache Verteilung mit minimalem Setup.",
"avoid": "Sie benötigen strenge Verkehrsgarantien.",
"example": "Schnelles Prototyping mit gleichwertigen Modellen."
},
"least-used": {
"when": "Sie möchten einen adaptiven Ausgleich basierend auf der Live-Nachfrage.",
"avoid": "Der Datenverkehr ist zu gering, um vom Nutzungsausgleich zu profitieren.",
"example": "Gemischte Arbeitslasten, bei denen ein Modell häufig überlastet ist."
},
"cost-optimized": {
"when": "Kostenreduzierung steht für Sie an erster Stelle.",
"avoid": "Preisdaten fehlen oder sind veraltet.",
"example": "Hintergrund- oder Batch-Jobs, bei denen geringere Kosten bevorzugt werden."
}
},
"advancedHelp": {
"maxRetries": "Wie viele Wiederholungsversuche werden unternommen, bevor eine Anfrage fehlschlägt.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Am wenigsten genutztes Routing, um die Nachfrage über einen längeren Zeitraum zu verteilen.",
"usageGuideHide": "Verstecken",
"usageGuideDontShowAgain": "Nicht mehr anzeigen",
"usageGuideShow": "Anleitung anzeigen",
"quickTestTitle": "Combo bereit zur Validierung",
"quickTestDescription": "Führen Sie jetzt einen Test durch, um das Fallback- und Latenzverhalten zu bestätigen.",
"testNow": "Jetzt testen",
"pricingCoverage": "Preisabdeckung",
"pricingCoverageHint": "Kostenoptimiert funktioniert am besten, wenn alle Combo-Modelle über Preise verfügen.",
"pricingAvailable": "Preise verfügbar",
"pricingMissing": "Keine Preisgestaltung",
"pricingAvailableShort": "preislich",
"pricingMissingShort": "kein Preis",
"warningRoundRobinSingleModel": "Round-Robin ist bei mindestens zwei Modellen am nützlichsten.",
"warningCostOptimizedPartialPricing": "Nur {priced} der {total} Modelle haben Preise. Die Routenplanung kann teilweise kostenbewusst erfolgen.",
"warningCostOptimizedNoPricing": "Für diese Kombination wurden keine Preisdaten gefunden. Eine kostenoptimierte Route kann unerwartet erfolgen."
},
"costs": {
"title": "Kosten",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Wandeln Sie Text in natürlich klingende Sprache um",
"moderations": "Moderationen",
"moderationsDesc": "Inhaltsmoderation und Sicherheitsklassifizierung",
"responsesDesc": "OpenAI Responses API für Codex und fortgeschrittene agentische Workflows",
"listModelsDesc": "Alle verfügbaren Modelle aller verbundenen Anbieter auflisten",
"settingsApiDesc": "OmniRoute-Konfiguration per API lesen und ändern",
"settingsApi": "Settings API",
"categoryCore": "Kern-APIs",
"categoryMedia": "Medien & Multi-Modal",
"categoryUtility": "Hilfsmittel & Verwaltung",
"enableCloudTitle": "Aktivieren Sie Cloud Proxy",
"whatYouGet": "Was Sie bekommen werden",
"cloudBenefitAccess": "Greifen Sie von überall auf der Welt auf Ihre API zu",
@@ -613,13 +733,154 @@
"image": "Bild",
"custom": "Brauch",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API für Codex und fortgeschrittene agentische Workflows",
"listModelsDesc": "Alle verfügbaren Modelle aller verbundenen Anbieter auflisten",
"settingsApi": "Settings API",
"settingsApiDesc": "OmniRoute-Konfiguration per API lesen und ändern",
"categoryCore": "Kern-APIs",
"categoryMedia": "Medien & Multi-Modal",
"categoryUtility": "Hilfsmittel & Verwaltung"
"sectionTitle": "Integrationsoberfläche",
"sectionDescription": "OpenAI-kompatible APIs und Betriebsprotokoll-Endpunkte",
"tabApis": "OpenAI-kompatible APIs",
"tabProtocols": "Protokolle",
"tabsAria": "Endpunktabschnitte",
"protocolsTitle": "Protokolle",
"protocolsDescription": "MCP und A2A sind erstklassige Endpunkte mit dedizierter Beobachtbarkeit und Kontrollen.",
"mcpCardTitle": "MCP-Server",
"mcpCardDescription": "Model Context Protocol über stdio",
"a2aCardTitle": "A2A-Server",
"a2aCardDescription": "Agent2Agent JSON-RPC-Endpunkt",
"protocolToolsLabel": "Werkzeuge",
"protocolTasksLabel": "Aufgaben",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Letzte Aktivität",
"quickStart": "Schnellstart",
"openMcpDashboard": "Öffnen Sie die MCP-Verwaltung",
"openA2aDashboard": "Öffnen Sie die A2A-Verwaltung",
"mcpQuickStartTitle": "MCP-Schnellstart",
"mcpQuickStartStep1": "Führen Sie den MCP-Server über `omniroute --mcp` aus.",
"mcpQuickStartStep2": "Konfigurieren Sie Ihren MCP-Client für die Verbindung über stdio-Transport.",
"mcpQuickStartStep3": "Rufen Sie Tools wie `omniroute_get_health` und `omniroute_list_combos` auf.",
"a2aQuickStartTitle": "A2A-Schnellstart",
"a2aQuickStartStep1": "Entdecken Sie die Agentenkarte unter `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Senden Sie JSON-RPC-Anfragen an `POST /a2a` mit `message/send` oder `message/stream`.",
"a2aQuickStartStep3": "Verfolgen und steuern Sie Aufgaben mit `tasks/get` und `tasks/cancel`."
},
"mcpDashboard": {
"loading": "MCP-Dashboard wird geladen...",
"activate": "aktivieren",
"deactivate": "deaktivieren",
"confirmSwitchCombo": "Bestätigen Sie die {action}-Kombination „{combo}“?",
"switchComboFailed": "Der Kombinationsstatus konnte nicht gewechselt werden.",
"switchComboSuccess": "Combo „{combo}“ aktualisiert.",
"confirmApplyProfile": "Resilienzprofil „{profile}“ anwenden?",
"applyProfileFailed": "Das Resilienzprofil konnte nicht angewendet werden.",
"applyProfileSuccess": "Profil „{profile}“ angewendet.",
"confirmResetBreakers": "Alle Schutzschalter zurücksetzen?",
"resetBreakersFailed": "Leistungsschalter konnten nicht zurückgesetzt werden.",
"resetBreakersSuccess": "Leistungsschalter zurückgesetzt.",
"processStatus": "Prozessstatus",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Sitzungsverfügbarkeit",
"lastHeartbeat": "Letzter Herzschlag",
"activity24h": "Aktivität (24h)",
"totalCalls": "Gesamtanzahl der Anrufe",
"successRate": "Erfolgsquote",
"avgLatency": "Durchschnittliche Latenz",
"topTools": "Top-Werkzeuge",
"noToolCalls24h": "Keine Werkzeugaufrufe in den letzten 24 Stunden.",
"runtimeDetails": "Laufzeitdetails",
"transport": "Transport",
"scopesEnforced": "Bereiche erzwungen",
"yes": "ja",
"no": "Nein",
"lastCall": "Letzter Anruf",
"heartbeatPath": "Herzschlagpfad",
"operationalControls": "Betriebskontrollen",
"switchCombo": "Kombination wechseln",
"inactive": "inaktiv",
"active": "aktiv",
"activateCombo": "Combo aktivieren",
"deactivateCombo": "Combo deaktivieren",
"applyResilienceProfile": "Resilienzprofil anwenden",
"profileAggressive": "aggressiv",
"profileBalanced": "ausgeglichen",
"profileConservative": "konservativ",
"applyProfile": "Profil anwenden",
"resetCircuitBreakers": "Leistungsschalter zurücksetzen",
"resetCircuitBreakersHelp": "Löscht den aktuellen Leistungsschalterstatus und die Fehlerzähler für Anbieter.",
"resetAllBreakers": "Setzen Sie alle Leistungsschalter zurück",
"toolsAndScopes": "Werkzeuge und Zielfernrohre",
"tableTool": "Werkzeug",
"tableScopes": "Bereiche",
"tablePhase": "Phase",
"tableAudit": "Prüfung",
"auditLog": "Audit-Protokoll",
"auditSummary": "Anrufe: {total} | Seite {page} von {totalPages}",
"allTools": "Alle Werkzeuge",
"allResults": "Alle Ergebnisse",
"success": "Erfolg",
"failure": "Misserfolg",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Aufgabe {taskId} abgebrochen.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agentenkarte",
"version": "Version",
"url": "URL",
"capabilities": "Fähigkeiten",
"agentCardNotAvailable": "Agentenkarte nicht verfügbar.",
"quickValidation": "Schnelle Validierung",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Aktualisiert",
"tableActions": "Aktionen",
"view": "Sicht",
"cancel": "Stornieren",
"previous": "Previous",
"next": "Next",
"taskDetail": "Aufgabendetails",
"close": "Schließen",
"metadata": "Metadaten",
"events": "Veranstaltungen",
"artifacts": "Artefakte"
},
"health": {
"title": "Systemgesundheit",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Wähle eine voreingestellte Farbe oder erstelle dein eigenes Thema mit einer Farbe",
"themeCreate": "Thema erstellen",
"themeCustom": "Benutzerdefiniertes Thema",
"themeCoral": "Koralle",
"themeBlue": "Blau",
"themeRed": "Rot",
"themeGreen": "Grün",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Sticky-Limit",
"stickyLimitDesc": "Anrufe pro Konto vor dem Wechsel",
"modelAliases": "Modell-Aliase",
"modelAliasesTitle": "Modell-Aliase",
"modelAliasesDesc": "Platzhaltermuster zum Neuzuordnen von Modellnamen • Verwenden Sie * und ?",
"addCustomAlias": "Benutzerdefinierten Alias hinzufügen",
"deprecatedModelId": "Veraltete Modell-ID",
"newModelId": "Neue Modell-ID",
"customAliases": "Benutzerdefinierte Aliase",
"builtInAliases": "Integrierte Aliase",
"backgroundDegradationTitle": "Hintergrundaufgaben-Degradierung",
"backgroundDegradationDesc": "Erkennt automatisch Hintergrundaufgaben (Titel, Zusammenfassungen) und leitet an günstigere Modelle weiter",
"enableDegradation": "Hintergrund-Degradierung aktivieren",
"enableDegradationHint": "Wenn aktiviert, werden Hintergrundaufgaben wie Titelgenerierung und Zusammenfassungen automatisch an günstigere Modelle weitergeleitet",
"tasksDetected": "Aufgaben erkannt",
"degradationMap": "Modell-Degradierungskarte",
"premiumModel": "Premium-Modell",
"cheapModel": "Günstiges Modell",
"detectionPatterns": "Erkennungsmuster",
"newPattern": "z.B. \"einen Titel generieren\"",
"aliasPatternPlaceholder": "Claude-Sonett-*",
"aliasTargetPlaceholder": "claude-sonett-4-20250514",
"pattern": "Muster",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Token, die zum Erstellen von Cache-Einträgen verwendet werden (Fallback auf Eingaberate)",
"customPricingNote": "Sie können die Standardpreise für bestimmte Modelle überschreiben. Benutzerdefinierte Überschreibungen haben Vorrang vor automatisch erkannten Preisen.",
"editPricing": "Preise bearbeiten",
"viewFullDetails": "Vollständige Details anzeigen",
"modelAliasesTitle": "Modell-Aliase",
"addCustomAlias": "Benutzerdefinierten Alias hinzufügen",
"deprecatedModelId": "Veraltete Modell-ID",
"newModelId": "Neue Modell-ID",
"customAliases": "Benutzerdefinierte Aliase",
"builtInAliases": "Integrierte Aliase",
"backgroundDegradationTitle": "Hintergrundaufgaben-Degradierung",
"backgroundDegradationDesc": "Erkennt automatisch Hintergrundaufgaben (Titel, Zusammenfassungen) und leitet an günstigere Modelle weiter",
"enableDegradation": "Hintergrund-Degradierung aktivieren",
"enableDegradationHint": "Wenn aktiviert, werden Hintergrundaufgaben wie Titelgenerierung und Zusammenfassungen automatisch an günstigere Modelle weitergeleitet",
"tasksDetected": "Aufgaben erkannt",
"degradationMap": "Modell-Degradierungskarte",
"premiumModel": "Premium-Modell",
"cheapModel": "Günstiges Modell",
"detectionPatterns": "Erkennungsmuster",
"newPattern": "z.B. \"einen Titel generieren\""
"viewFullDetails": "Vollständige Details anzeigen"
},
"translator": {
"title": "Übersetzer",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Anbieter",
"commonUseCases": "Häufige Anwendungsfälle",
"clientCompatibility": "Client-Kompatibilität",
"protocolsToc": "Protokolle",
"apiReference": "API-Referenz",
"method": "Methode",
"path": "Pfad",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Benutzen",
"clientClaudeBullet1Middle": "(Claude) oder",
"clientClaudeBullet1Suffix": "Präfix (Antigravitation).",
"protocolsTitle": "Protokolle: MCP und A2A",
"protocolsDescription": "OmniRoute stellt zusätzlich zu OpenAI-kompatiblen APIs zwei Betriebsprotokolle zur Verfügung: MCP für die Tool-Ausführung und A2A für Agent-zu-Agent-Workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Verwenden Sie MCP über Standard, damit Kunden OmniRoute-Tools mit Audit-Transparenz entdecken und aufrufen können.",
"protocolMcpStep1": "Starten Sie den MCP-Transport mit `omniroute --mcp`.",
"protocolMcpStep2": "Weisen Sie Ihren MCP-Client auf stdio transport hin.",
"protocolMcpStep3": "Rufen Sie `omniroute_get_health` und `omniroute_list_combos` auf, um die Konnektivität zu überprüfen.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Verwenden Sie A2A JSON-RPC, um Aufgaben synchron oder per SSE-Streaming zu übermitteln.",
"protocolA2aStep1": "Lesen Sie `/.well-known/agent.json` für die Agentenerkennung.",
"protocolA2aStep2": "Senden Sie `message/send`- oder `message/stream`-Anfragen an `POST /a2a`.",
"protocolA2aStep3": "Verwalten Sie den Aufgabenlebenszyklus mit `tasks/get` und `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "Wenn der MCP-Status offline ist, überprüfen Sie, ob der stdio-Prozess ausgeführt wird und die Heartbeat-Datei aktualisiert wird.",
"protocolTroubleshooting2": "Wenn A2A-Aufgaben in `working` bleiben, überprüfen Sie `/api/a2a/tasks/:id` und streamen Sie Ereignisse auf den Endstatus.",
"protocolTroubleshooting3": "Verwenden Sie `/dashboard/mcp` und `/dashboard/a2a` für betriebliche Kontrollen und Audit-Transparenz.",
"endpointChatNote": "OpenAI-kompatibler Chat-Endpunkt (Standard).",
"endpointResponsesNote": "Antwort-API-Endpunkt (Codex, O-Serie).",
"endpointModelsNote": "Musterkatalog für alle angeschlossenen Anbieter.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute wird „wie besehen“ ohne Gewährleistung jeglicher Art bereitgestellt. Wir sind nicht verantwortlich für Kosten, die durch API-Nutzung, Dienstunterbrechungen oder Datenverlust entstehen. Bewahren Sie immer Backups Ihrer Konfiguration auf.",
"termsSection6Title": "6. Open Source",
"termsSection6Text": "OmniRoute ist Open-Source-Software. Es steht Ihnen frei, es im Rahmen der Lizenzbedingungen zu prüfen, zu ändern und zu verbreiten."
},
"media": {
"title": "Medien-Playground",
"subtitle": "Erstelle Bilder, Videos und Musik",
"model": "Model",
"prompt": "Prompt",
"generate": "Generieren",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -578,7 +578,75 @@
"saving": "Saving...",
"weighted": "Weighted",
"leastUsed": "Least-Used",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Costs",

View File

@@ -69,11 +69,14 @@
"health": "Salud",
"limits": "Límites y cuotas",
"cliTools": "Herramientas CLI",
"media": "Multimedia",
"settings": "Configuración",
"translator": "Traductor",
"docs": "Documentación",
"issues": "Problemas",
"endpoint": "Punto final",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Gestor de API",
"logs": "Registros",
"auditLog": "Registro de auditoría",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "El servidor proxy se ha detenido o se está reiniciando.",
"expandSidebar": "Expandir barra lateral",
"collapseSidebar": "Contraer barra lateral",
"media": "Multimedia"
"themes": "Temas",
"presetColors": "Colores populares",
"createTheme": "Crear tema",
"chooseColor": "Elige un color",
"themeCoral": "Coral",
"themeBlue": "Azul",
"themeRed": "Rojo",
"themeGreen": "Verde",
"themeViolet": "Violeta",
"themeOrange": "Naranja",
"themeCyan": "cian"
},
"themesPage": {
"title": "Temas",
"description": "Elige un tema preestablecido o crea el tuyo propio con un solo color",
"presetColors": "Colores populares",
"customTheme": "Tema personalizado",
"customThemeDesc": "Haga clic en crear tema y elija un color",
"createTheme": "Crear tema",
"activePreset": "Tema activo"
},
"header": {
"logout": "Cerrar sesión",
@@ -108,10 +130,18 @@
"homeDescription": "Bienvenido a OmniRoute",
"endpoint": "Punto final",
"endpointDescription": "Configuración del punto final API",
"mcp": "Gestión de PCM",
"mcpDescription": "Supervise el proceso, las herramientas y los controles operativos del servidor MCP",
"a2a": "Gestión A2A",
"a2aDescription": "Supervise el estado, las tareas y la actividad de transmisión de Agent2Agent",
"settings": "Configuración",
"settingsDescription": "Gestiona tus preferencias",
"openaiCompatible": "Compatible con OpenAI",
"anthropicCompatible": "Compatible con Anthropic"
"anthropicCompatible": "Compatible con Anthropic",
"media": "Medios de comunicación",
"mediaDescription": "Genera imágenes, vídeos y música.",
"themes": "Temas",
"themesDescription": "Elija un tema de color para todo el panel del tablero"
},
"home": {
"quickStart": "Inicio rápido",
@@ -261,6 +291,21 @@
"showing": "Mostrando entradas {count} (desplazamiento {offset})",
"previous": "Anterior"
},
"media": {
"title": "Zona multimedia",
"subtitle": "Genera imágenes, videos y música",
"model": "Model",
"prompt": "Prompt",
"generate": "Generar",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Herramientas CLI",
"noActiveProviders": "No hay proveedores activos",
@@ -533,7 +578,75 @@
"saving": "Guardando...",
"weighted": "ponderado",
"leastUsed": "Menos utilizado",
"costOpt": "Opción de costo"
"costOpt": "Opción de costo",
"strategyGuideTitle": "Cómo utilizar esta estrategia",
"strategyGuideWhen": "cuando usar",
"strategyGuideAvoid": "evitar cuando",
"strategyGuideExample": "Ejemplo",
"strategyGuide": {
"priority": {
"when": "Tiene un modelo preferido y sólo desea recurrir al fracaso.",
"avoid": "Necesita distribución de solicitudes entre modelos.",
"example": "Modelo de codificación primaria con respaldo más económico para cortes."
},
"weighted": {
"when": "Necesita tráfico controlado dividido entre modelos.",
"avoid": "No se pueden mantener pesos precisos a lo largo del tiempo.",
"example": "80% de modelo estable + 20% de implementación de modelo canario."
},
"round-robin": {
"when": "Quiere una distribución predecible y uniforme.",
"avoid": "Los modelos difieren demasiado en latencia o costo.",
"example": "Mismo modelo en varias cuentas para distribuir el rendimiento."
},
"random": {
"when": "Quiere una distribución sencilla con una configuración mínima.",
"avoid": "Necesita estrictas garantías de tráfico.",
"example": "Creación rápida de prototipos con modelos equivalentes."
},
"least-used": {
"when": "Quiere un equilibrio adaptativo basado en la demanda en vivo.",
"avoid": "El tráfico es demasiado bajo para beneficiarse del equilibrio de uso.",
"example": "Cargas de trabajo mixtas en las que un modelo a menudo se sobrecarga."
},
"cost-optimized": {
"when": "La reducción de costos es su principal prioridad.",
"avoid": "Faltan datos de precios o están desactualizados.",
"example": "Trabajos en segundo plano o por lotes donde se prefiere un menor costo."
}
},
"advancedHelp": {
"maxRetries": "Cuántos reintentos se intentan antes de fallar una solicitud.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Rutas menos utilizadas para distribuir la demanda a lo largo del tiempo.",
"usageGuideHide": "Esconder",
"usageGuideDontShowAgain": "No volver a mostrar",
"usageGuideShow": "mostrar guía",
"quickTestTitle": "Combo listo para validar",
"quickTestDescription": "Ejecute una prueba ahora para confirmar el comportamiento de reserva y latencia.",
"testNow": "Prueba ahora",
"pricingCoverage": "Cobertura de precios",
"pricingCoverageHint": "La optimización de costos funciona mejor cuando todos los modelos combinados tienen precios.",
"pricingAvailable": "Precios disponibles",
"pricingMissing": "Sin precios",
"pricingAvailableShort": "carillo",
"pricingMissingShort": "sin precio",
"warningRoundRobinSingleModel": "El round-robin es más útil con al menos 2 modelos.",
"warningCostOptimizedPartialPricing": "Solo {priced} de los modelos {total} tienen precios. El enrutamiento puede tener en cuenta parcialmente los costos.",
"warningCostOptimizedNoPricing": "No se encontraron datos de precios para este combo. El costo optimizado puede enrutarse inesperadamente."
},
"costs": {
"title": "Costos",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Convierta texto en voz con sonido natural",
"moderations": "Moderaciones",
"moderationsDesc": "Moderación de contenidos y clasificación de seguridad.",
"responsesDesc": "API Responses de OpenAI para Codex y flujos de trabajo agénticos avanzados",
"listModelsDesc": "Listar todos los modelos disponibles en todos los proveedores conectados",
"settingsApiDesc": "Leer y modificar la configuración de OmniRoute a través de la API",
"settingsApi": "Settings API",
"categoryCore": "APIs Principales",
"categoryMedia": "Medios y Multi-Modal",
"categoryUtility": "Utilidades y Gestión",
"enableCloudTitle": "Habilitar proxy en la nube",
"whatYouGet": "lo que obtendrás",
"cloudBenefitAccess": "Accede a tu API desde cualquier parte del mundo",
@@ -613,13 +733,154 @@
"image": "Imagen",
"custom": "personalizado",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "API Responses de OpenAI para Codex y flujos de trabajo agénticos avanzados",
"listModelsDesc": "Listar todos los modelos disponibles en todos los proveedores conectados",
"settingsApi": "Settings API",
"settingsApiDesc": "Leer y modificar la configuración de OmniRoute a través de la API",
"categoryCore": "APIs Principales",
"categoryMedia": "Medios y Multi-Modal",
"categoryUtility": "Utilidades y Gestión"
"sectionTitle": "Superficie de integración",
"sectionDescription": "API compatibles con OpenAI y puntos finales de protocolo operativo",
"tabApis": "API compatibles con OpenAI",
"tabProtocols": "Protocolos",
"tabsAria": "Secciones de punto final",
"protocolsTitle": "Protocolos",
"protocolsDescription": "MCP y A2A son puntos finales de primera clase con observabilidad y controles dedicados.",
"mcpCardTitle": "Servidor MCP",
"mcpCardDescription": "Protocolo de contexto modelo sobre stdio",
"a2aCardTitle": "Servidor A2A",
"a2aCardDescription": "Punto final Agent2Agent JSON-RPC",
"protocolToolsLabel": "Herramientas",
"protocolTasksLabel": "Tareas",
"protocolActiveStreamsLabel": "Corrientes activas",
"protocolLastActivity": "Última actividad",
"quickStart": "Inicio rápido",
"openMcpDashboard": "Gestión abierta de MCP",
"openA2aDashboard": "Gestión A2A abierta",
"mcpQuickStartTitle": "Inicio rápido de MCP",
"mcpQuickStartStep1": "Ejecute el servidor MCP a través de `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure su cliente MCP para conectarse a través del transporte estándar.",
"mcpQuickStartStep3": "Invoca herramientas como `omniroute_get_health` y `omniroute_list_combos`.",
"a2aQuickStartTitle": "Inicio rápido de A2A",
"a2aQuickStartStep1": "Descubra la tarjeta de agente en `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Envíe solicitudes JSON-RPC a `POST /a2a` usando `message/send` o `message/stream`.",
"a2aQuickStartStep3": "Realice un seguimiento y controle las tareas utilizando `tasks/get` y `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Cargando el panel de MCP...",
"activate": "activar",
"deactivate": "desactivar",
"confirmSwitchCombo": "¿Confirmar el combo {action} \"{combo}\"?",
"switchComboFailed": "No se pudo cambiar el estado combinado.",
"switchComboSuccess": "Combo \"{combo}\" actualizado.",
"confirmApplyProfile": "¿Aplicar perfil de resiliencia \"{profile}\"?",
"applyProfileFailed": "No se pudo aplicar el perfil de resiliencia.",
"applyProfileSuccess": "Perfil \"{profile}\" aplicado.",
"confirmResetBreakers": "¿Reiniciar todos los disyuntores?",
"resetBreakersFailed": "No se pudo restablecer los disyuntores.",
"resetBreakersSuccess": "Restablecimiento de los disyuntores.",
"processStatus": "Estado del proceso",
"online": "En línea",
"offline": "Desconectado",
"pid": "PID",
"sessionUptime": "tiempo de actividad de la sesión",
"lastHeartbeat": "último latido",
"activity24h": "Actividad (24h)",
"totalCalls": "Llamadas totales",
"successRate": "Tasa de éxito",
"avgLatency": "Latencia promedio",
"topTools": "Herramientas superiores",
"noToolCalls24h": "No hubo llamadas de herramientas en las últimas 24 horas.",
"runtimeDetails": "Detalles del tiempo de ejecución",
"transport": "Transporte",
"scopesEnforced": "Alcances aplicados",
"yes": "Sí",
"no": "No",
"lastCall": "última llamada",
"heartbeatPath": "Camino del latido del corazón",
"operationalControls": "Controles operativos",
"switchCombo": "Combinación de interruptores",
"inactive": "inactivo",
"active": "activo",
"activateCombo": "Activar combo",
"deactivateCombo": "Desactivar combo",
"applyResilienceProfile": "Aplicar perfil de resiliencia",
"profileAggressive": "agresivo",
"profileBalanced": "equilibrado",
"profileConservative": "conservador",
"applyProfile": "Aplicar perfil",
"resetCircuitBreakers": "Restablecer disyuntores",
"resetCircuitBreakersHelp": "Borra el estado actual del interruptor y los contadores de fallas para los proveedores.",
"resetAllBreakers": "Restablecer todos los interruptores",
"toolsAndScopes": "Herramientas y alcances",
"tableTool": "Herramienta",
"tableScopes": "Alcances",
"tablePhase": "Fase",
"tableAudit": "Auditoría",
"auditLog": "Registro de auditoría",
"auditSummary": "Llamadas: {total} | página {page} de {totalPages}",
"allTools": "Todas las herramientas",
"allResults": "Todos los resultados",
"success": "Éxito",
"failure": "Falla",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "No se pudo cancelar la tarea.",
"cancelTaskSuccess": "Tarea {taskId} cancelada.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Corrientes activas",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelado"
},
"agentCard": "tarjeta de agente",
"version": "Versión",
"url": "URL",
"capabilities": "Capacidades",
"agentCardNotAvailable": "Tarjeta de agente no disponible.",
"quickValidation": "Validación rápida",
"quickValidationDescription": "Ejecuta llamadas de humo a través del punto final `/a2a` en vivo.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "Vista",
"cancel": "Cancelar",
"previous": "Previous",
"next": "Next",
"taskDetail": "Detalle de la tarea",
"close": "Cerca",
"metadata": "Metadatos",
"events": "Eventos",
"artifacts": "Artefactos"
},
"health": {
"title": "Estado del sistema",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Elige un color predefinido o crea tu propio tema con un solo color",
"themeCreate": "Crear tema",
"themeCustom": "Tema personalizado",
"themeCoral": "Coral",
"themeBlue": "Azul",
"themeRed": "Rojo",
"themeGreen": "Verde",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Límite fijo",
"stickyLimitDesc": "Llamadas por cuenta antes de cambiar",
"modelAliases": "Alias de modelo",
"modelAliasesTitle": "Aliases de Modelo",
"modelAliasesDesc": "Patrones comodín para reasignar nombres de modelos • Utilice * y ?",
"addCustomAlias": "Agregar Alias Personalizado",
"deprecatedModelId": "ID del modelo obsoleto",
"newModelId": "Nuevo ID del modelo",
"customAliases": "Aliases Personalizados",
"builtInAliases": "Aliases Integrados",
"backgroundDegradationTitle": "Degradación de Tareas en Segundo Plano",
"backgroundDegradationDesc": "Detecta automáticamente tareas en segundo plano (títulos, resúmenes) y redirige a modelos más baratos",
"enableDegradation": "Activar Degradación en Segundo Plano",
"enableDegradationHint": "Cuando está activado, las tareas en segundo plano como generación de títulos y resúmenes se redirigen automáticamente a modelos más baratos",
"tasksDetected": "Tareas detectadas",
"degradationMap": "Mapa de Degradación de Modelos",
"premiumModel": "Modelo premium",
"cheapModel": "Modelo económico",
"detectionPatterns": "Patrones de Detección",
"newPattern": "ej: \"generar un título\"",
"aliasPatternPlaceholder": "claude-soneto-*",
"aliasTargetPlaceholder": "claude-soneto-4-20250514",
"pattern": "Patrón",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Tokens utilizados para crear entradas de caché (retroceso a la tasa de entrada)",
"customPricingNote": "Puede anular los precios predeterminados para modelos específicos. Las anulaciones personalizadas tienen prioridad sobre los precios detectados automáticamente.",
"editPricing": "Editar precios",
"viewFullDetails": "Ver todos los detalles",
"modelAliasesTitle": "Aliases de Modelo",
"addCustomAlias": "Agregar Alias Personalizado",
"deprecatedModelId": "ID del modelo obsoleto",
"newModelId": "Nuevo ID del modelo",
"customAliases": "Aliases Personalizados",
"builtInAliases": "Aliases Integrados",
"backgroundDegradationTitle": "Degradación de Tareas en Segundo Plano",
"backgroundDegradationDesc": "Detecta automáticamente tareas en segundo plano (títulos, resúmenes) y redirige a modelos más baratos",
"enableDegradation": "Activar Degradación en Segundo Plano",
"enableDegradationHint": "Cuando está activado, las tareas en segundo plano como generación de títulos y resúmenes se redirigen automáticamente a modelos más baratos",
"tasksDetected": "Tareas detectadas",
"degradationMap": "Mapa de Degradación de Modelos",
"premiumModel": "Modelo premium",
"cheapModel": "Modelo económico",
"detectionPatterns": "Patrones de Detección",
"newPattern": "ej: \"generar un título\""
"viewFullDetails": "Ver todos los detalles"
},
"translator": {
"title": "Traductor",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Proveedores",
"commonUseCases": "Casos de uso comunes",
"clientCompatibility": "Compatibilidad del cliente",
"protocolsToc": "Protocolos",
"apiReference": "Referencia de API",
"method": "Método",
"path": "Camino",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "uso",
"clientClaudeBullet1Middle": "(Claude) o",
"clientClaudeBullet1Suffix": "Prefijo (antigravedad).",
"protocolsTitle": "Protocolos: MCP y A2A",
"protocolsDescription": "OmniRoute expone dos protocolos operativos además de las API compatibles con OpenAI: MCP para la ejecución de herramientas y A2A para flujos de trabajo de agente a agente.",
"protocolMcpTitle": "MCP (Protocolo de contexto modelo)",
"protocolMcpDesc": "Utilice MCP sobre stdio para permitir que los clientes descubran y llamen a las herramientas OmniRoute con visibilidad de auditoría.",
"protocolMcpStep1": "Inicie el transporte MCP con `omniroute --mcp`.",
"protocolMcpStep2": "Apunte su cliente MCP al transporte stdio.",
"protocolMcpStep3": "Llame a `omniroute_get_health` y `omniroute_list_combos` para validar la conectividad.",
"protocolA2aTitle": "A2A (Agente2Agente)",
"protocolA2aDesc": "Utilice A2A JSON-RPC para enviar tareas de forma sincrónica o mediante transmisión SSE.",
"protocolA2aStep1": "Lea `/.well-known/agent.json` para descubrir agentes.",
"protocolA2aStep2": "Envíe solicitudes `message/send` o `message/stream` a `POST /a2a`.",
"protocolA2aStep3": "Administre el ciclo de vida de las tareas con `tasks/get` y `tasks/cancel`.",
"protocolTroubleshootingTitle": "Solución de problemas de protocolo",
"protocolTroubleshooting1": "Si el estado de MCP está fuera de línea, verifique que el proceso stdio se esté ejecutando y que el archivo de latido se esté actualizando.",
"protocolTroubleshooting2": "Si las tareas A2A permanecen en `working`, inspeccione `/api/a2a/tasks/:id` y transmita eventos para ver el estado terminal.",
"protocolTroubleshooting3": "Utilice `/dashboard/mcp` y `/dashboard/a2a` para controles operativos y visibilidad de auditoría.",
"endpointChatNote": "Punto final de chat compatible con OpenAI (predeterminado).",
"endpointResponsesNote": "Punto final de API de respuestas (Codex, o-series).",
"endpointModelsNote": "Catálogo de modelos para todos los proveedores conectados.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute se proporciona \"tal cual\" sin garantía de ningún tipo. No somos responsables de los costos incurridos por el uso de API, interrupciones del servicio o pérdida de datos. Mantenga siempre copias de seguridad de su configuración.",
"termsSection6Title": "6. Código abierto",
"termsSection6Text": "OmniRoute es un software de código abierto. Usted es libre de inspeccionarlo, modificarlo y distribuirlo según los términos de su licencia."
},
"media": {
"title": "Zona multimedia",
"subtitle": "Genera imágenes, videos y música",
"model": "Model",
"prompt": "Prompt",
"generate": "Generar",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Terveys",
"limits": "Rajoitukset ja kiintiöt",
"cliTools": "CLI-työkalut",
"media": "Media",
"settings": "Asetukset",
"translator": "Kääntäjä",
"docs": "Asiakirjat",
"issues": "Ongelmat",
"endpoint": "Päätepiste",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API Manager",
"logs": "Lokit",
"auditLog": "Tarkastusloki",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Välityspalvelin on pysäytetty tai käynnistyy uudelleen.",
"expandSidebar": "Laajenna sivupalkki",
"collapseSidebar": "Tiivistä sivupalkki",
"media": "Media"
"themes": "Teemat",
"presetColors": "Suosittuja värejä",
"createTheme": "Luo teema",
"chooseColor": "Valitse yksi väri",
"themeCoral": "koralli",
"themeBlue": "Sininen",
"themeRed": "Punainen",
"themeGreen": "Vihreä",
"themeViolet": "Violetti",
"themeOrange": "Oranssi",
"themeCyan": "Syaani"
},
"themesPage": {
"title": "Teemat",
"description": "Valitse esiasetettu teema tai luo oma yhdellä värillä",
"presetColors": "Suosittuja värejä",
"customTheme": "Mukautettu teema",
"customThemeDesc": "Napsauta Luo teema ja valitse yksi väri",
"createTheme": "Luo teema",
"activePreset": "Aktiivinen teema"
},
"header": {
"logout": "Kirjaudu ulos",
@@ -108,10 +130,18 @@
"homeDescription": "Tervetuloa OmniRouteen",
"endpoint": "Päätepiste",
"endpointDescription": "API-päätepisteen määritys",
"mcp": "MCP-hallinta",
"mcpDescription": "Valvo MCP-palvelinprosessia, työkaluja ja toimintojen ohjaimia",
"a2a": "A2A hallinta",
"a2aDescription": "Valvo Agent2Agentin tilaa, tehtäviä ja suoratoistotoimintaa",
"settings": "Asetukset",
"settingsDescription": "Hallinnoi asetuksiasi",
"openaiCompatible": "OpenAI-yhteensopiva",
"anthropicCompatible": "Antrooppinen yhteensopiva"
"anthropicCompatible": "Antrooppinen yhteensopiva",
"media": "Media",
"mediaDescription": "Luo kuvia, videoita ja musiikkia",
"themes": "Teemat",
"themesDescription": "Valitse väriteema koko kojelautapaneelille"
},
"home": {
"quickStart": "Pika-aloitus",
@@ -261,6 +291,21 @@
"showing": "Näytetään {count} merkintää (poikkeama {offset})",
"previous": "Edellinen"
},
"media": {
"title": "Mediatyöpaja",
"subtitle": "Luo kuvia, videoita ja musiikkia",
"model": "Model",
"prompt": "Prompt",
"generate": "Luo",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI-työkalut",
"noActiveProviders": "Ei aktiivisia palveluntarjoajia",
@@ -533,7 +578,75 @@
"saving": "Tallennetaan...",
"weighted": "Painotettu",
"leastUsed": "Vähiten käytetty",
"costOpt": "Kustannus-opt"
"costOpt": "Kustannus-opt",
"strategyGuideTitle": "Kuinka käyttää tätä strategiaa",
"strategyGuideWhen": "Milloin käyttää",
"strategyGuideAvoid": "Vältä milloin",
"strategyGuideExample": "Esimerkki",
"strategyGuide": {
"priority": {
"when": "Sinulla on yksi ensisijainen malli ja haluat varautua vain epäonnistumisen yhteydessä.",
"avoid": "Tarvitset pyynnön jakelun eri malleihin.",
"example": "Ensisijainen koodausmalli, jossa on halvempi varmuuskopio katkosten varalta."
},
"weighted": {
"when": "Tarvitset ohjattua liikennettä jaettuna malleihin.",
"avoid": "Et voi säilyttää tarkkoja painoja ajan mittaan.",
"example": "80% vakaa malli + 20% kanarian mallin käyttöönotto."
},
"round-robin": {
"when": "Haluat ennakoitavan ja tasaisen jakelun.",
"avoid": "Mallit eroavat liikaa latenssista tai hinnasta.",
"example": "Sama malli useilla tileillä suorituskyvyn levittämiseksi."
},
"random": {
"when": "Haluat yksinkertaisen jakelun minimaalisella asennuksella.",
"avoid": "Tarvitset tiukat liikennetakuut.",
"example": "Nopea prototyyppien tekeminen vastaavilla malleilla."
},
"least-used": {
"when": "Haluat mukautuvan tasapainotuksen live-kysynnän perusteella.",
"avoid": "Liikenne on liian vähäistä hyötyäkseen käytön tasapainotuksesta.",
"example": "Sekalaiset työmäärät, joissa yksi malli usein ylikuormitetaan."
},
"cost-optimized": {
"when": "Kustannusten vähentäminen on tärkein prioriteettisi.",
"avoid": "Hinnoittelutiedot puuttuvat tai ovat vanhentuneet.",
"example": "Tausta- tai erätyöt, joissa edullisemmat kustannukset ovat paremmat."
}
},
"advancedHelp": {
"maxRetries": "Kuinka monta uudelleenyritystä yritetään ennen kuin pyyntö epäonnistuu.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Vähiten käytetty reititys kysynnän hajauttamiseksi ajan mittaan.",
"usageGuideHide": "Piilottaa",
"usageGuideDontShowAgain": "Älä näytä uudelleen",
"usageGuideShow": "Näytä opas",
"quickTestTitle": "Yhdistelmä valmis tarkistettavaksi",
"quickTestDescription": "Suorita testi nyt varmistaaksesi vara- ja latenssitoiminnan.",
"testNow": "Testaa nyt",
"pricingCoverage": "Hinnoittelun kattavuus",
"pricingCoverageHint": "Kustannusoptimointi toimii parhaiten, kun kaikissa yhdistelmämalleissa on hinnoittelu.",
"pricingAvailable": "Hinnoittelu saatavilla",
"pricingMissing": "Ei hinnoittelua",
"pricingAvailableShort": "hinnoiteltu",
"pricingMissingShort": "ei-hintaa",
"warningRoundRobinSingleModel": "Round-robin on hyödyllisin vähintään kahdella mallilla.",
"warningCostOptimizedPartialPricing": "Vain {priced} {total}-malleista on hinnoiteltu. Reititys voi olla osittain kustannustietoinen.",
"warningCostOptimizedNoPricing": "Tälle yhdistelmälle ei löytynyt hintatietoja. Kustannusoptimoitu voi reitittää odottamatta."
},
"costs": {
"title": "Kustannukset",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Muunna teksti luonnolliselta kuulostavaksi puheeksi",
"moderations": "Moderaatiot",
"moderationsDesc": "Sisällön moderointi ja turvallisuusluokitus",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Ydin-API:t",
"categoryMedia": "Media & Monimuotoinen",
"categoryUtility": "Apuohjelmat & Hallinta",
"enableCloudTitle": "Ota Cloud Proxy käyttöön",
"whatYouGet": "Mitä saat",
"cloudBenefitAccess": "Käytä sovellusliittymääsi mistä päin maailmaa tahansa",
@@ -613,13 +733,154 @@
"image": "Kuva",
"custom": "mukautettu",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Ydin-API:t",
"categoryMedia": "Media & Monimuotoinen",
"categoryUtility": "Apuohjelmat & Hallinta"
"sectionTitle": "Integrointipinta",
"sectionDescription": "OpenAI-yhteensopivat API:t ja toimintaprotokollan päätepisteet",
"tabApis": "OpenAI-yhteensopivat sovellusliittymät",
"tabProtocols": "Protokollat",
"tabsAria": "Päätepisteen osat",
"protocolsTitle": "Protokollat",
"protocolsDescription": "MCP ja A2A ovat ensiluokkaisia päätepisteitä, joissa on omistettu tarkkailtavuus ja hallinta.",
"mcpCardTitle": "MCP-palvelin",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A palvelin",
"a2aCardDescription": "Agent2Agent JSON-RPC -päätepiste",
"protocolToolsLabel": "Työkalut",
"protocolTasksLabel": "Tehtävät",
"protocolActiveStreamsLabel": "Aktiiviset streamit",
"protocolLastActivity": "Last activity",
"quickStart": "Pika-aloitus",
"openMcpDashboard": "Avaa MCP-hallinta",
"openA2aDashboard": "Avaa A2A-hallinta",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Suorita MCP-palvelin `omniroute --mcp`:n kautta.",
"mcpQuickStartStep2": "Määritä MCP-asiakas muodostamaan yhteys stdio-siirron kautta.",
"mcpQuickStartStep3": "Kutsu työkaluja, kuten `omniroute_get_health` ja `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Pikaopas",
"a2aQuickStartStep1": "Tutustu agenttikorttiin osoitteessa `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Lähetä JSON-RPC-pyynnöt osoitteeseen `POST /a2a` käyttämällä `message/send` tai `message/stream`.",
"a2aQuickStartStep3": "Seuraa ja ohjaa tehtäviä käyttämällä `tasks/get` ja `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Ladataan MCP-hallintapaneelia...",
"activate": "aktivoida",
"deactivate": "deaktivoida",
"confirmSwitchCombo": "Vahvista {action}-yhdistelmä \"{combo}\"?",
"switchComboFailed": "Yhdistelmätilan vaihtaminen epäonnistui.",
"switchComboSuccess": "Yhdistelmä \"{combo}\" päivitetty.",
"confirmApplyProfile": "Otetaanko joustavuusprofiili käyttöön \"{profile}\"?",
"applyProfileFailed": "Resilienssiprofiilin käyttäminen epäonnistui.",
"applyProfileSuccess": "Profiilia \"{profile}\" on käytetty.",
"confirmResetBreakers": "Nollataanko kaikki katkaisijat?",
"resetBreakersFailed": "Katkaisijoiden nollaus epäonnistui.",
"resetBreakersSuccess": "Katkaisijat nollattu.",
"processStatus": "Prosessin tila",
"online": "verkossa",
"offline": "Offline-tilassa",
"pid": "PID",
"sessionUptime": "Istunnon käyttöaika",
"lastHeartbeat": "Viimeinen sydämenlyönti",
"activity24h": "Aktiviteetti (24h)",
"totalCalls": "Puhelut yhteensä",
"successRate": "Menestysprosentti",
"avgLatency": "Keskimääräinen viive",
"topTools": "Huipputyökalut",
"noToolCalls24h": "Ei työkalukutsuja viimeisen 24 tunnin aikana.",
"runtimeDetails": "Kestoajan tiedot",
"transport": "Kuljetus",
"scopesEnforced": "Laajuudet pannaan täytäntöön",
"yes": "kyllä",
"no": "ei",
"lastCall": "Viimeinen puhelu",
"heartbeatPath": "Sydämen sykkeen polku",
"operationalControls": "Toiminnalliset ohjaimet",
"switchCombo": "Kytkinyhdistelmä",
"inactive": "ei-aktiivinen",
"active": "aktiivinen",
"activateCombo": "Aktivoi yhdistelmä",
"deactivateCombo": "Poista yhdistelmä käytöstä",
"applyResilienceProfile": "Käytä joustavuusprofiilia",
"profileAggressive": "aggressive",
"profileBalanced": "tasapainoinen",
"profileConservative": "konservatiivinen",
"applyProfile": "Käytä profiilia",
"resetCircuitBreakers": "Nollaa katkaisijat",
"resetCircuitBreakersHelp": "Tyhjentää nykyisen katkaisijatilan ja palveluntarjoajien vikalaskurin.",
"resetAllBreakers": "Nollaa kaikki katkaisijat",
"toolsAndScopes": "Työkaluja ja tähtäimet",
"tableTool": "Työkalu",
"tableScopes": "Soveltamisalat",
"tablePhase": "Vaihe",
"tableAudit": "Audit",
"auditLog": "Tarkastusloki",
"auditSummary": "Puhelut: {total} | sivu {page} / {totalPages}",
"allTools": "Kaikki työkalut",
"allResults": "Kaikki tulokset",
"success": "Menestystä",
"failure": "Epäonnistuminen",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Ladataan tarkastusmerkintöjä...",
"noAuditEntriesForFilters": "Nykyisille suodattimille ei löytynyt tarkastusmerkintöjä.",
"tableTimestamp": "Aikaleima",
"tableDuration": "Kesto",
"tableResult": "Tulos",
"tableApiKey": "API-avain",
"failed": "epäonnistunut",
"previous": "Edellinen",
"next": "Seuraavaksi"
},
"a2aDashboard": {
"loading": "Ladataan A2A-hallintapaneelia...",
"confirmCancelTask": "Peruutetaanko tehtävä {taskId}?",
"cancelTaskFailed": "Tehtävän peruuttaminen epäonnistui.",
"cancelTaskSuccess": "Tehtävä {taskId} peruutettu.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Aktiiviset streamit",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "valmiiksi",
"failed": "epäonnistunut",
"cancelled": "peruutettu"
},
"agentCard": "Agenttikortti",
"version": "Versio",
"url": "URL-osoite",
"capabilities": "Ominaisuudet",
"agentCardNotAvailable": "Agenttikorttia ei ole saatavilla.",
"quickValidation": "Nopea vahvistus",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Päivitetty",
"tableActions": "Toiminnot",
"view": "Näytä",
"cancel": "Peruuttaa",
"previous": "Edellinen",
"next": "Seuraavaksi",
"taskDetail": "Tehtävän yksityiskohdat",
"close": "Lähellä",
"metadata": "Metatiedot",
"events": "Tapahtumat",
"artifacts": "Artefaktit"
},
"health": {
"title": "Järjestelmän terveys",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Valitse valmis väri tai luo oma teemasi yhdellä värillä",
"themeCreate": "Luo teema",
"themeCustom": "Mukautettu teema",
"themeCoral": "Koralli",
"themeBlue": "Sininen",
"themeRed": "Punainen",
"themeGreen": "Vihreä",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Sticky Limit",
"stickyLimitDesc": "Puhelut tilikohtaisesti ennen vaihtamista",
"modelAliases": "Mallin aliakset",
"modelAliasesTitle": "Mallialias",
"modelAliasesDesc": "Jokerimerkkikuviot mallien nimien yhdistämiseen • Käytä * ja ?",
"addCustomAlias": "Lisää Mukautettu Alias",
"deprecatedModelId": "Vanhentunut malli-ID",
"newModelId": "Uusi malli-ID",
"customAliases": "Mukautetut Aliakset",
"builtInAliases": "Sisäänrakennetut Aliakset",
"backgroundDegradationTitle": "Taustatyö Degradointi",
"backgroundDegradationDesc": "Tunnistaa automaattisesti taustatyöt (otsikot, yhteenvedot) ja ohjaa halvempiin malleihin",
"enableDegradation": "Ota Taustadegraadointi Käyttöön",
"enableDegradationHint": "Kun käytössä, taustatyöt kuten otsikoiden luominen ja yhteenvedot ohjataan automaattisesti halvempiin malleihin",
"tasksDetected": "Tehtävät tunnistettu",
"degradationMap": "Mallin Degradaatiokartta",
"premiumModel": "Premium-malli",
"cheapModel": "Halpa malli",
"detectionPatterns": "Tunnistusmallit",
"newPattern": "esim. \"luo otsikko\"",
"aliasPatternPlaceholder": "claude-sonett-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "kuvio",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Välimuistimerkintöjen luomiseen käytetyt tunnukset (varausarvo syöttönopeuteen)",
"customPricingNote": "Voit ohittaa tiettyjen mallien oletushinnoittelun. Mukautetut ohitukset ovat etusijalla automaattisesti tunnistettuihin hinnoitteluun nähden.",
"editPricing": "Muokkaa hinnoittelua",
"viewFullDetails": "Näytä täydelliset tiedot",
"modelAliasesTitle": "Mallialias",
"addCustomAlias": "Lisää Mukautettu Alias",
"deprecatedModelId": "Vanhentunut malli-ID",
"newModelId": "Uusi malli-ID",
"customAliases": "Mukautetut Aliakset",
"builtInAliases": "Sisäänrakennetut Aliakset",
"backgroundDegradationTitle": "Taustatyö Degradointi",
"backgroundDegradationDesc": "Tunnistaa automaattisesti taustatyöt (otsikot, yhteenvedot) ja ohjaa halvempiin malleihin",
"enableDegradation": "Ota Taustadegraadointi Käyttöön",
"enableDegradationHint": "Kun käytössä, taustatyöt kuten otsikoiden luominen ja yhteenvedot ohjataan automaattisesti halvempiin malleihin",
"tasksDetected": "Tehtävät tunnistettu",
"degradationMap": "Mallin Degradaatiokartta",
"premiumModel": "Premium-malli",
"cheapModel": "Halpa malli",
"detectionPatterns": "Tunnistusmallit",
"newPattern": "esim. \"luo otsikko\""
"viewFullDetails": "Näytä täydelliset tiedot"
},
"translator": {
"title": "Kääntäjä",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Palveluntarjoajat",
"commonUseCases": "Yleiset käyttötapaukset",
"clientCompatibility": "Asiakasyhteensopivuus",
"protocolsToc": "Protokollat",
"apiReference": "API-viite",
"method": "menetelmä",
"path": "Polku",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Käytä",
"clientClaudeBullet1Middle": "(Claude) tai",
"clientClaudeBullet1Suffix": "(Antigravity) etuliite.",
"protocolsTitle": "Protokollat: MCP & A2A",
"protocolsDescription": "OmniRoute paljastaa kaksi toimintaprotokollaa OpenAI-yhteensopivien sovellusliittymien lisäksi: MCP työkalujen suorittamiseen ja A2A agenttien välisiin työnkulkuihin.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Käytä MCP over stdio -palvelua, jotta asiakkaat voivat löytää ja kutsua OmniRoute-työkaluja tarkastuksen näkyvyydellä.",
"protocolMcpStep1": "Aloita MCP-siirto `omniroute --mcp`:lla.",
"protocolMcpStep2": "Osoita MCP-asiakkaasi stdio-kuljetukseen.",
"protocolMcpStep3": "Vahvista yhteys soittamalla `omniroute_get_health` ja `omniroute_list_combos`.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Käytä A2A JSON-RPC:tä tehtävien lähettämiseen synkronisesti tai SSE-suoratoiston kautta.",
"protocolA2aStep1": "Lue `/.well-known/agent.json` agentin löytämiseksi.",
"protocolA2aStep2": "Lähetä `message/send` tai `message/stream` pyynnöt osoitteeseen `POST /a2a`.",
"protocolA2aStep3": "Hallitse tehtävän elinkaarta `tasks/get`- ja `tasks/cancel`-toiminnolla.",
"protocolTroubleshootingTitle": "Protokollan vianmääritys",
"protocolTroubleshooting1": "Jos MCP-tila on offline-tilassa, varmista, että stdio-prosessi on käynnissä ja heartbeat-tiedosto päivittyy.",
"protocolTroubleshooting2": "Jos A2A-tehtävät pysyvät `working`, tarkista `/api/a2a/tasks/:id` ja suoratoista tapahtumat päätteen tilasta.",
"protocolTroubleshooting3": "Käytä `/dashboard/mcp` ja `/dashboard/a2a` toiminnan ohjaamiseen ja tarkastuksen näkyvyyteen.",
"endpointChatNote": "OpenAI-yhteensopiva chat-päätepiste (oletus).",
"endpointResponsesNote": "Responses API-päätepiste (Codex, o-sarja).",
"endpointModelsNote": "Malliluettelo kaikille liitetyille palveluntarjoajille.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute toimitetaan \"sellaisenaan\" ilman minkäänlaista takuuta. Emme ole vastuussa kustannuksista, jotka aiheutuvat API:n käytöstä, palveluhäiriöistä tai tietojen katoamisesta. Pidä aina varmuuskopiot asetuksistasi.",
"termsSection6Title": "6. Avoin lähdekoodi",
"termsSection6Text": "OmniRoute on avoimen lähdekoodin ohjelmisto. Voit vapaasti tarkastaa, muokata ja jakaa sitä sen lisenssiehtojen mukaisesti."
},
"media": {
"title": "Mediatyöpaja",
"subtitle": "Luo kuvia, videoita ja musiikkia",
"model": "Model",
"prompt": "Prompt",
"generate": "Luo",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Santé",
"limits": "Limites et quotas",
"cliTools": "Outils CLI",
"media": "Médias",
"settings": "Paramètres",
"translator": "Traducteur",
"docs": "Documentation",
"issues": "Problèmes",
"endpoint": "Point de terminaison",
"mcp": "PCM",
"a2a": "A2A",
"apiManager": "Gestionnaire d'API",
"logs": "Journaux",
"auditLog": "Journal d'audit",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Le serveur proxy a été arrêté ou est en train de redémarrer.",
"expandSidebar": "Développer la barre latérale",
"collapseSidebar": "Réduire la barre latérale",
"media": "Médias"
"themes": "Thèmes",
"presetColors": "Couleurs populaires",
"createTheme": "Créer un thème",
"chooseColor": "Choisissez une couleur",
"themeCoral": "Corail",
"themeBlue": "Bleu",
"themeRed": "Rouge",
"themeGreen": "Vert",
"themeViolet": "Violette",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Thèmes",
"description": "Choisissez un thème prédéfini ou créez le vôtre avec une seule couleur",
"presetColors": "Couleurs populaires",
"customTheme": "Thème personnalisé",
"customThemeDesc": "Cliquez sur créer un thème et choisissez une couleur",
"createTheme": "Créer un thème",
"activePreset": "Thème actif"
},
"header": {
"logout": "Déconnexion",
@@ -108,10 +130,18 @@
"homeDescription": "Bienvenue sur OmniRoute",
"endpoint": "Point de terminaison",
"endpointDescription": "Configuration du point de terminaison de l'API",
"mcp": "Gestion MCP",
"mcpDescription": "Surveiller les processus, les outils et les contrôles opérationnels du serveur MCP",
"a2a": "Gestion A2A",
"a2aDescription": "Surveiller l'état, les tâches et l'activité de streaming d'Agent2Agent",
"settings": "Paramètres",
"settingsDescription": "Gérez vos préférences",
"openaiCompatible": "Compatible avec OpenAI",
"anthropicCompatible": "Compatible Anthropic"
"anthropicCompatible": "Compatible Anthropic",
"media": "Médias",
"mediaDescription": "Générez des images, des vidéos et de la musique",
"themes": "Thèmes",
"themesDescription": "Choisissez un thème de couleur pour l'ensemble du panneau du tableau de bord"
},
"home": {
"quickStart": "Démarrage rapide",
@@ -261,6 +291,21 @@
"showing": "Affichage des entrées {count} (décalage {offset})",
"previous": "Précédent"
},
"media": {
"title": "Espace média",
"subtitle": "Générez des images, des vidéos et de la musique",
"model": "Model",
"prompt": "Prompt",
"generate": "Générer",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Outils CLI",
"noActiveProviders": "Aucun fournisseur actif",
@@ -533,7 +578,75 @@
"saving": "Sauvegarde...",
"weighted": "Pondéré",
"leastUsed": "Le moins utilisé",
"costOpt": "Option de coût"
"costOpt": "Option de coût",
"strategyGuideTitle": "Comment utiliser cette stratégie",
"strategyGuideWhen": "Quand utiliser",
"strategyGuideAvoid": "A éviter quand",
"strategyGuideExample": "Exemple",
"strategyGuide": {
"priority": {
"when": "Vous avez un modèle préféré et souhaitez uniquement une solution de secours en cas d'échec.",
"avoid": "Vous avez besoin dune distribution des demandes entre les modèles.",
"example": "Modèle de codage principal avec sauvegarde moins chère en cas de panne."
},
"weighted": {
"when": "Vous avez besoin dun trafic contrôlé réparti entre les modèles.",
"avoid": "Vous ne pouvez pas maintenir des poids précis au fil du temps.",
"example": "Modèle stable à 80 % + déploiement du modèle Canary à 20 %."
},
"round-robin": {
"when": "Vous voulez une distribution prévisible et uniforme.",
"avoid": "Les modèles diffèrent trop en termes de latence ou de coût.",
"example": "Même modèle sur plusieurs comptes pour répartir le débit."
},
"random": {
"when": "Vous souhaitez une distribution simple avec une configuration minimale.",
"avoid": "Vous avez besoin de garanties de trafic strictes.",
"example": "Prototypage rapide avec des modèles équivalents."
},
"least-used": {
"when": "Vous souhaitez un équilibrage adaptatif basé sur la demande en direct.",
"avoid": "Le trafic est trop faible pour bénéficier dun équilibrage des usages.",
"example": "Charges de travail mixtes où un modèle est souvent surchargé."
},
"cost-optimized": {
"when": "La réduction des coûts est votre priorité absolue.",
"avoid": "Les données de tarification sont manquantes ou obsolètes.",
"example": "Travaux en arrière-plan ou par lots pour lesquels un coût inférieur est préféré."
}
},
"advancedHelp": {
"maxRetries": "Combien de tentatives sont tentées avant l'échec d'une requête.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Charge équilibrée",
"templateBalancedDesc": "Routage le moins utilisé pour répartir la demande dans le temps.",
"usageGuideHide": "Cacher",
"usageGuideDontShowAgain": "Ne plus montrer",
"usageGuideShow": "Afficher le guide",
"quickTestTitle": "Combo prêt à valider",
"quickTestDescription": "Exécutez un test maintenant pour confirmer le comportement de repli et de latence.",
"testNow": "Testez maintenant",
"pricingCoverage": "Couverture tarifaire",
"pricingCoverageHint": "Les coûts optimisés fonctionnent mieux lorsque tous les modèles combinés ont des prix.",
"pricingAvailable": "Tarifs disponibles",
"pricingMissing": "Pas de prix",
"pricingAvailableShort": "prix",
"pricingMissingShort": "sans prix",
"warningRoundRobinSingleModel": "Le round-robin est plus utile avec au moins 2 modèles.",
"warningCostOptimizedPartialPricing": "Seuls {priced} des modèles {total} ont un prix. Le routage peut être partiellement axé sur les coûts.",
"warningCostOptimizedNoPricing": "Aucune donnée de prix trouvée pour ce combo. Un itinéraire optimisé en termes de coûts peut être inattendu."
},
"costs": {
"title": "Coûts",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Convertir du texte en discours au son naturel",
"moderations": "Modérations",
"moderationsDesc": "Modération du contenu et classification de sécurité",
"responsesDesc": "API Responses d'OpenAI pour Codex et workflows agentiques avancés",
"listModelsDesc": "Lister tous les modèles disponibles sur tous les fournisseurs connectés",
"settingsApiDesc": "Lire et modifier la configuration d'OmniRoute via l'API",
"settingsApi": "Settings API",
"categoryCore": "APIs Principales",
"categoryMedia": "Médias et Multi-Modal",
"categoryUtility": "Utilitaires et Gestion",
"enableCloudTitle": "Activer le proxy cloud",
"whatYouGet": "Ce que vous obtiendrez",
"cloudBenefitAccess": "Accédez à votre API depuis n'importe où dans le monde",
@@ -613,13 +733,154 @@
"image": "Images",
"custom": "personnalisé",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "API Responses d'OpenAI pour Codex et workflows agentiques avancés",
"listModelsDesc": "Lister tous les modèles disponibles sur tous les fournisseurs connectés",
"settingsApi": "Settings API",
"settingsApiDesc": "Lire et modifier la configuration d'OmniRoute via l'API",
"categoryCore": "APIs Principales",
"categoryMedia": "Médias et Multi-Modal",
"categoryUtility": "Utilitaires et Gestion"
"sectionTitle": "Surface d'intégration",
"sectionDescription": "API compatibles OpenAI et points de terminaison du protocole opérationnel",
"tabApis": "API compatibles OpenAI",
"tabProtocols": "Protocoles",
"tabsAria": "Sections de point de terminaison",
"protocolsTitle": "Protocoles",
"protocolsDescription": "MCP et A2A sont des points de terminaison de première classe avec une observabilité et des contrôles dédiés.",
"mcpCardTitle": "Serveur MCP",
"mcpCardDescription": "Protocole de contexte de modèle sur stdio",
"a2aCardTitle": "Serveur A2A",
"a2aCardDescription": "Point de terminaison Agent2Agent JSON-RPC",
"protocolToolsLabel": "Outils",
"protocolTasksLabel": "Tâches",
"protocolActiveStreamsLabel": "Flux actifs",
"protocolLastActivity": "Dernière activité",
"quickStart": "Démarrage rapide",
"openMcpDashboard": "Gestion MCP ouverte",
"openA2aDashboard": "Gestion A2A ouverte",
"mcpQuickStartTitle": "Démarrage rapide MCP",
"mcpQuickStartStep1": "Exécutez le serveur MCP via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configurez votre client MCP pour vous connecter via le transport stdio.",
"mcpQuickStartStep3": "Invoquez des outils tels que `omniroute_get_health` et `omniroute_list_combos`.",
"a2aQuickStartTitle": "Démarrage rapide A2A",
"a2aQuickStartStep1": "Découvrez la carte d'agent sur `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Envoyez des requêtes JSON-RPC à `POST /a2a` en utilisant `message/send` ou `message/stream`.",
"a2aQuickStartStep3": "Suivez et contrôlez les tâches à laide de `tasks/get` et `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Chargement du tableau de bord MCP...",
"activate": "activer",
"deactivate": "désactiver",
"confirmSwitchCombo": "Confirmer la combinaison {action} \"{combo}\" ?",
"switchComboFailed": "Échec du changement d'état du combo.",
"switchComboSuccess": "Combo \"{combo}\" mis à jour.",
"confirmApplyProfile": "Appliquer le profil de résilience « {profile} » ?",
"applyProfileFailed": "Échec de l'application du profil de résilience.",
"applyProfileSuccess": "Profil \"{profile}\" appliqué.",
"confirmResetBreakers": "Réinitialiser tous les disjoncteurs ?",
"resetBreakersFailed": "Échec de la réinitialisation des disjoncteurs.",
"resetBreakersSuccess": "Les disjoncteurs se réinitialisent.",
"processStatus": "Statut du processus",
"online": "En ligne",
"offline": "Hors ligne",
"pid": "PID",
"sessionUptime": "Disponibilité de la session",
"lastHeartbeat": "Dernier battement de coeur",
"activity24h": "Activité (24h)",
"totalCalls": "Total des appels",
"successRate": "Taux de réussite",
"avgLatency": "Latence moyenne",
"topTools": "Meilleurs outils",
"noToolCalls24h": "Aucun outil n'a appelé au cours des dernières 24 heures.",
"runtimeDetails": "Détails d'exécution",
"transport": "Transports",
"scopesEnforced": "Portées appliquées",
"yes": "oui",
"no": "non",
"lastCall": "Dernier appel",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Contrôles opérationnels",
"switchCombo": "Changer de combinaison",
"inactive": "inactif",
"active": "actif",
"activateCombo": "Activer le combo",
"deactivateCombo": "Désactiver le combo",
"applyResilienceProfile": "Appliquer le profil de résilience",
"profileAggressive": "agressif",
"profileBalanced": "équilibré",
"profileConservative": "conservateur",
"applyProfile": "Appliquer le profil",
"resetCircuitBreakers": "Réinitialiser les disjoncteurs",
"resetCircuitBreakersHelp": "Efface létat actuel du disjoncteur et les compteurs de pannes pour les fournisseurs.",
"resetAllBreakers": "Réinitialiser tous les disjoncteurs",
"toolsAndScopes": "Outils et portées",
"tableTool": "Outil",
"tableScopes": "Portées",
"tablePhase": "Phase",
"tableAudit": "Vérification",
"auditLog": "Journal d'audit",
"auditSummary": "Appels : {total} | page {page} de {totalPages}",
"allTools": "Tous les outils",
"allResults": "Tous les résultats",
"success": "Succès",
"failure": "Échec",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Échec de l'annulation de la tâche.",
"cancelTaskSuccess": "Tâche {taskId} annulée.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Flux actifs",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "annulé"
},
"agentCard": "Carte d'agent",
"version": "Version",
"url": "URL",
"capabilities": "Capacités",
"agentCardNotAvailable": "Carte d'agent non disponible.",
"quickValidation": "Validation rapide",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actes",
"view": "Voir",
"cancel": "Annuler",
"previous": "Previous",
"next": "Next",
"taskDetail": "Détail de la tâche",
"close": "Fermer",
"metadata": "Métadonnées",
"events": "Événements",
"artifacts": "Artefacts"
},
"health": {
"title": "Santé du système",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Choisissez une couleur prédéfinie ou créez votre propre thème avec une seule couleur",
"themeCreate": "Créer un thème",
"themeCustom": "Thème personnalisé",
"themeCoral": "Corail",
"themeBlue": "Bleu",
"themeRed": "Rouge",
"themeGreen": "Vert",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Limite collante",
"stickyLimitDesc": "Appels par compte avant de changer",
"modelAliases": "Alias de modèle",
"modelAliasesTitle": "Alias de Modèles",
"modelAliasesDesc": "Modèles génériques pour remapper les noms de modèles • Utilisez * et ?",
"addCustomAlias": "Ajouter un Alias Personnalisé",
"deprecatedModelId": "ID du modèle obsolète",
"newModelId": "Nouvel ID de modèle",
"customAliases": "Alias Personnalisés",
"builtInAliases": "Alias Intégrés",
"backgroundDegradationTitle": "Dégradation des Tâches en Arrière-plan",
"backgroundDegradationDesc": "Détecte automatiquement les tâches en arrière-plan (titres, résumés) et redirige vers des modèles moins chers",
"enableDegradation": "Activer la Dégradation en Arrière-plan",
"enableDegradationHint": "Lorsqu'activé, les tâches en arrière-plan comme la génération de titres et les résumés sont redirigées automatiquement vers des modèles moins chers",
"tasksDetected": "Tâches détectées",
"degradationMap": "Carte de Dégradation des Modèles",
"premiumModel": "Modèle premium",
"cheapModel": "Modèle économique",
"detectionPatterns": "Modèles de Détection",
"newPattern": "ex: \"générer un titre\"",
"aliasPatternPlaceholder": "claude-sonnet-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Modèle",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Jetons utilisés pour créer des entrées de cache (repli sur le débit d'entrée)",
"customPricingNote": "Vous pouvez remplacer le prix par défaut pour des modèles spécifiques. Les remplacements personnalisés ont la priorité sur les prix détectés automatiquement.",
"editPricing": "Modifier le prix",
"viewFullDetails": "Afficher tous les détails",
"modelAliasesTitle": "Alias de Modèles",
"addCustomAlias": "Ajouter un Alias Personnalisé",
"deprecatedModelId": "ID du modèle obsolète",
"newModelId": "Nouvel ID de modèle",
"customAliases": "Alias Personnalisés",
"builtInAliases": "Alias Intégrés",
"backgroundDegradationTitle": "Dégradation des Tâches en Arrière-plan",
"backgroundDegradationDesc": "Détecte automatiquement les tâches en arrière-plan (titres, résumés) et redirige vers des modèles moins chers",
"enableDegradation": "Activer la Dégradation en Arrière-plan",
"enableDegradationHint": "Lorsqu'activé, les tâches en arrière-plan comme la génération de titres et les résumés sont redirigées automatiquement vers des modèles moins chers",
"tasksDetected": "Tâches détectées",
"degradationMap": "Carte de Dégradation des Modèles",
"premiumModel": "Modèle premium",
"cheapModel": "Modèle économique",
"detectionPatterns": "Modèles de Détection",
"newPattern": "ex: \"générer un titre\""
"viewFullDetails": "Afficher tous les détails"
},
"translator": {
"title": "Traducteur",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Fournisseurs",
"commonUseCases": "Cas d'utilisation courants",
"clientCompatibility": "Compatibilité client",
"protocolsToc": "Protocoles",
"apiReference": "Référence API",
"method": "Méthode",
"path": "Chemin",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Utiliser",
"clientClaudeBullet1Middle": "(Claude) ou",
"clientClaudeBullet1Suffix": "Préfixe (Antigravité).",
"protocolsTitle": "Protocoles : MCP et A2A",
"protocolsDescription": "OmniRoute expose deux protocoles opérationnels en plus des API compatibles OpenAI : MCP pour l'exécution des outils et A2A pour les flux de travail d'agent à agent.",
"protocolMcpTitle": "MCP (protocole de contexte de modèle)",
"protocolMcpDesc": "Utilisez MCP sur stdio pour permettre aux clients de découvrir et d'appeler les outils OmniRoute avec une visibilité d'audit.",
"protocolMcpStep1": "Démarrez le transport MCP avec `omniroute --mcp`.",
"protocolMcpStep2": "Pointez votre client MCP vers le transport stdio.",
"protocolMcpStep3": "Appelez `omniroute_get_health` et `omniroute_list_combos` pour valider la connectivité.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Utilisez A2A JSON-RPC pour soumettre des tâches de manière synchrone ou via le streaming SSE.",
"protocolA2aStep1": "Lisez `/.well-known/agent.json` pour la découverte d'agents.",
"protocolA2aStep2": "Envoyez les requêtes `message/send` ou `message/stream` à `POST /a2a`.",
"protocolA2aStep3": "Gérez le cycle de vie des tâches avec `tasks/get` et `tasks/cancel`.",
"protocolTroubleshootingTitle": "Dépannage du protocole",
"protocolTroubleshooting1": "Si l'état MCP est hors ligne, vérifiez que le processus stdio est en cours d'exécution et que le fichier de pulsation est mis à jour.",
"protocolTroubleshooting2": "Si les tâches A2A restent dans `working`, inspectez `/api/a2a/tasks/:id` et diffusez les événements pour connaître l'état du terminal.",
"protocolTroubleshooting3": "Utilisez `/dashboard/mcp` et `/dashboard/a2a` pour les contrôles opérationnels et la visibilité des audits.",
"endpointChatNote": "Point de terminaison de discussion compatible OpenAI (par défaut).",
"endpointResponsesNote": "Point de terminaison de lAPI de réponses (Codex, série o).",
"endpointModelsNote": "Catalogue modèle pour tous les fournisseurs connectés.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute est fourni « tel quel », sans garantie d'aucune sorte. Nous ne sommes pas responsables des coûts occasionnés par l'utilisation de l'API, les interruptions de service ou la perte de données. Conservez toujours des sauvegardes de votre configuration.",
"termsSection6Title": "6. Ouvrir la source",
"termsSection6Text": "OmniRoute est un logiciel open source. Vous êtes libre de l'inspecter, de le modifier et de le distribuer selon les termes de sa licence."
},
"media": {
"title": "Espace média",
"subtitle": "Générez des images, des vidéos et de la musique",
"model": "Model",
"prompt": "Prompt",
"generate": "Générer",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "בריאות",
"limits": "מגבלות ומכסות",
"cliTools": "כלי CLI",
"media": "מדיה",
"settings": "הגדרות",
"translator": "מתרגם",
"docs": "מסמכים",
"issues": "בעיות",
"endpoint": "נקודת קצה",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "מנהל API",
"logs": "יומנים",
"auditLog": "יומן ביקורת",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "שרת ה-proxy נעצר או מופעל מחדש.",
"expandSidebar": "הרחב את סרגל הצד",
"collapseSidebar": "כווץ את סרגל הצד",
"media": "מדיה"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "התנתק",
@@ -108,10 +130,18 @@
"homeDescription": "ברוכים הבאים ל-OmniRoute",
"endpoint": "נקודת קצה",
"endpointDescription": "תצורת נקודת קצה API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "הגדרות",
"settingsDescription": "נהל את ההעדפות שלך",
"openaiCompatible": "תואם OpenAI",
"anthropicCompatible": "תואם אנתרופי"
"anthropicCompatible": "תואם אנתרופי",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "התחלה מהירה",
@@ -261,6 +291,21 @@
"showing": "מציג ערכים של {count} (היסט {offset})",
"previous": "הקודם"
},
"media": {
"title": "אולפן מדיה",
"subtitle": "צור תמונות, סרטונים ומוזיקה",
"model": "Model",
"prompt": "Prompt",
"generate": "צור",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "כלי CLI",
"noActiveProviders": "אין ספקים פעילים",
@@ -533,7 +578,75 @@
"saving": "שומר...",
"weighted": "משוקלל",
"leastUsed": "הכי פחות בשימוש",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "עלויות",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "המרת טקסט לדיבור בצלילים טבעיים",
"moderations": "מנחות",
"moderationsDesc": "ניהול תוכן וסיווג בטיחות",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "ממשקי API ליבה",
"categoryMedia": "מדיה ומולטי-מודלי",
"categoryUtility": "כלים וניהול",
"enableCloudTitle": "אפשר Cloud Proxy",
"whatYouGet": "מה תקבל",
"cloudBenefitAccess": "גש ל-API שלך מכל מקום בעולם",
@@ -613,13 +733,154 @@
"image": "תמונה",
"custom": "מותאם אישית",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "ממשקי API ליבה",
"categoryMedia": "מדיה ומולטי-מודלי",
"categoryUtility": "כלים וניהול"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "בריאות המערכת",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "בחר צבע מוכן מראש או צור ערכת נושא משלך עם צבע אחד",
"themeCreate": "צור ערכת נושא",
"themeCustom": "ערכת נושא מותאמת אישית",
"themeCoral": "אלמוג",
"themeBlue": "כחול",
"themeRed": "אדום",
"themeGreen": "ירוק",
@@ -1181,7 +1441,23 @@
"stickyLimit": "גבול דביק",
"stickyLimitDesc": "שיחות לכל חשבון לפני המעבר",
"modelAliases": "כינויי דגם",
"modelAliasesTitle": "כינויי מודלים",
"modelAliasesDesc": "תבניות תווים כלליים למיפוי מחדש של שמות מודלים • השתמש ב-* וב-?",
"addCustomAlias": "הוסף כינוי מותאם אישית",
"deprecatedModelId": "מזהה מודל מיושן",
"newModelId": "מזהה מודל חדש",
"customAliases": "כינויים מותאמים אישית",
"builtInAliases": "כינויים מובנים",
"backgroundDegradationTitle": "הפחתת משימות רקע",
"backgroundDegradationDesc": "זיהוי אוטומטי של משימות רקע (כותרות, סיכומים) והפניה למודלים זולים יותר",
"enableDegradation": "הפעל הפחתת משימות רקע",
"enableDegradationHint": "כאשר מופעל, משימות רקע כמו יצירת כותרות וסיכומים מופנות אוטומטית למודלים זולים יותר",
"tasksDetected": "משימות שזוהו",
"degradationMap": "מפת הפחתת מודלים",
"premiumModel": "מודל פרימיום",
"cheapModel": "מודל זול",
"detectionPatterns": "דפוסי זיהוי",
"newPattern": "לדוגמה: \"צור כותרת\"",
"aliasPatternPlaceholder": "קלוד-סונט-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "דפוס",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "אסימונים המשמשים ליצירת ערכי מטמון (חזרה לקצב קלט)",
"customPricingNote": "אתה יכול לעקוף את תמחור ברירת המחדל עבור דגמים ספציפיים. עקיפות מותאמות אישית מקבלות עדיפות על פני תמחור שזוהה אוטומטית.",
"editPricing": "ערוך תמחור",
"viewFullDetails": "צפה בפרטים המלאים",
"modelAliasesTitle": "כינויי מודלים",
"addCustomAlias": "הוסף כינוי מותאם אישית",
"deprecatedModelId": "מזהה מודל מיושן",
"newModelId": "מזהה מודל חדש",
"customAliases": "כינויים מותאמים אישית",
"builtInAliases": "כינויים מובנים",
"backgroundDegradationTitle": "הפחתת משימות רקע",
"backgroundDegradationDesc": "זיהוי אוטומטי של משימות רקע (כותרות, סיכומים) והפניה למודלים זולים יותר",
"enableDegradation": "הפעל הפחתת משימות רקע",
"enableDegradationHint": "כאשר מופעל, משימות רקע כמו יצירת כותרות וסיכומים מופנות אוטומטית למודלים זולים יותר",
"tasksDetected": "משימות שזוהו",
"degradationMap": "מפת הפחתת מודלים",
"premiumModel": "מודל פרימיום",
"cheapModel": "מודל זול",
"detectionPatterns": "דפוסי זיהוי",
"newPattern": "לדוגמה: \"צור כותרת\""
"viewFullDetails": "צפה בפרטים המלאים"
},
"translator": {
"title": "מתרגם",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "ספקים",
"commonUseCases": "מקרי שימוש נפוצים",
"clientCompatibility": "תאימות ללקוח",
"protocolsToc": "Protocols",
"apiReference": "הפניה ל-API",
"method": "שיטה",
"path": "נתיב",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "השתמש",
"clientClaudeBullet1Middle": "(קלוד) או",
"clientClaudeBullet1Suffix": "קידומת (אנטי כבידה).",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "נקודת קצה צ'אט תואמת OpenAI (ברירת מחדל).",
"endpointResponsesNote": "נקודת קצה של תגובות API (Codex, o-series).",
"endpointModelsNote": "קטלוג דגמים לכל הספקים המחוברים.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute מסופק \"כמות שהוא\" ללא אחריות מכל סוג שהוא. איננו אחראים לכל עלויות שייגרמו כתוצאה משימוש ב-API, שיבושים בשירות או אובדן נתונים. שמור תמיד גיבויים של התצורה שלך.",
"termsSection6Title": "6. קוד פתוח",
"termsSection6Text": "OmniRoute היא תוכנת קוד פתוח. אתה חופשי לבדוק, לשנות ולהפיץ אותו תחת תנאי הרישיון שלו."
},
"media": {
"title": "אולפן מדיה",
"subtitle": "צור תמונות, סרטונים ומוזיקה",
"model": "Model",
"prompt": "Prompt",
"generate": "צור",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Egészség",
"limits": "Korlátok és kvóták",
"cliTools": "CLI eszközök",
"media": "Média",
"settings": "Beállítások elemre",
"translator": "Fordító",
"docs": "Dokumentumok",
"issues": "problémák",
"endpoint": "Végpont",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API-kezelő",
"logs": "Naplók",
"auditLog": "Ellenőrzési napló",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "A proxyszerver leállt vagy újraindul.",
"expandSidebar": "Az oldalsáv kibontása",
"collapseSidebar": "Oldalsáv összecsukása",
"media": "Média"
"themes": "Témák",
"presetColors": "Népszerű színek",
"createTheme": "Hozzon létre témát",
"chooseColor": "Válasszon egy színt",
"themeCoral": "Korall",
"themeBlue": "Kék",
"themeRed": "Piros",
"themeGreen": "zöld",
"themeViolet": "Violet",
"themeOrange": "narancssárga",
"themeCyan": "Cián"
},
"themesPage": {
"title": "Témák",
"description": "Válasszon egy előre beállított témát, vagy hozzon létre saját témát egyetlen színnel",
"presetColors": "Népszerű színek",
"customTheme": "Egyedi téma",
"customThemeDesc": "Kattintson a Téma létrehozása elemre, és válasszon egy színt",
"createTheme": "Hozzon létre témát",
"activePreset": "Aktív téma"
},
"header": {
"logout": "Kijelentkezés",
@@ -108,10 +130,18 @@
"homeDescription": "Üdvözöljük az OmniRoute oldalán",
"endpoint": "Végpont",
"endpointDescription": "API-végpont konfigurációja",
"mcp": "MCP menedzsment",
"mcpDescription": "Figyelemmel kíséri az MCP-kiszolgáló folyamatát, eszközeit és működési vezérlőit",
"a2a": "A2A menedzsment",
"a2aDescription": "Figyelemmel kíséri az Agent2Agent állapotát, a feladatokat és a streamelési tevékenységet",
"settings": "Beállítások elemre",
"settingsDescription": "Kezelje beállításait",
"openaiCompatible": "OpenAI kompatibilis",
"anthropicCompatible": "Antropikus kompatibilis"
"anthropicCompatible": "Antropikus kompatibilis",
"media": "Média",
"mediaDescription": "Készítsen képeket, videókat és zenét",
"themes": "Témák",
"themesDescription": "Válasszon színtémát az egész irányítópult panelhez"
},
"home": {
"quickStart": "Gyors kezdés",
@@ -261,6 +291,21 @@
"showing": "{count} bejegyzés megjelenítése (eltolás {offset})",
"previous": "Előző"
},
"media": {
"title": "Média játszótér",
"subtitle": "Képek, videók és zene generálása",
"model": "Model",
"prompt": "Prompt",
"generate": "Generálás",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI eszközök",
"noActiveProviders": "Nincsenek aktív szolgáltatók",
@@ -533,7 +578,75 @@
"saving": "Mentés...",
"weighted": "Súlyozott",
"leastUsed": "Legkevésbé használt",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "Hogyan kell használni ezt a stratégiát",
"strategyGuideWhen": "Mikor kell használni",
"strategyGuideAvoid": "Kerülje el, hogy mikor",
"strategyGuideExample": "Példa",
"strategyGuide": {
"priority": {
"when": "Egy előnyben részesített modellje van, és csak meghibásodás esetén szeretne tartalékot adni.",
"avoid": "Kérelmet kell elosztania a modellek között.",
"example": "Elsődleges kódolási modell olcsóbb biztonsági mentéssel a kimaradások esetére."
},
"weighted": {
"when": "Ellenőrzött forgalomra van szükség a modellek között.",
"avoid": "Nem tudja tartani a pontos súlyokat az idő múlásával.",
"example": "80% stabil modell + 20% kanári modell kihelyezés."
},
"round-robin": {
"when": "Kiszámítható és egyenletes elosztást szeretne.",
"avoid": "A modellek túlságosan különböznek a késleltetésben vagy a költségekben.",
"example": "Ugyanaz a modell több fiókban az átviteli sebesség növelése érdekében."
},
"random": {
"when": "Egyszerű terjesztést szeretne minimális beállítással.",
"avoid": "Szigorú forgalmi garanciákra van szüksége.",
"example": "Gyors prototípus készítés egyenértékű modellekkel."
},
"least-used": {
"when": "Adaptív kiegyensúlyozást szeretne az élő igények alapján.",
"avoid": "A forgalom túl alacsony ahhoz, hogy kihasználja a használat kiegyenlítését.",
"example": "Vegyes munkaterhelések, ahol az egyik modell gyakran túlterhelt."
},
"cost-optimized": {
"when": "A költségcsökkentés az Ön legfőbb prioritása.",
"avoid": "Az árképzési adatok hiányoznak vagy elavultak.",
"example": "Háttérben végzett vagy kötegelt munkák, ahol az alacsonyabb költséget részesítik előnyben."
}
},
"advancedHelp": {
"maxRetries": "Hány újrapróbálkozás történik a kérés sikertelensége előtt.",
"retryDelay": "Kezdeti várakozás az újrapróbálkozások között. A magasabb értékek csökkentik a repedési nyomást.",
"timeout": "A kérés maximális időtartama a megszakítás előtt.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Ne mutasd újra",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Költségek",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Szöveg átalakítása természetes hangzású beszéddé",
"moderations": "Moderálások",
"moderationsDesc": "A tartalom moderálása és biztonsági osztályozása",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Alap API-k",
"categoryMedia": "Média és Multi-Modális",
"categoryUtility": "Segédeszközök és Kezelés",
"enableCloudTitle": "Cloud Proxy engedélyezése",
"whatYouGet": "Amit kapsz",
"cloudBenefitAccess": "Hozzáférés az API-jához a világ bármely pontjáról",
@@ -613,13 +733,154 @@
"image": "Kép",
"custom": "szokás",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Alap API-k",
"categoryMedia": "Média és Multi-Modális",
"categoryUtility": "Segédeszközök és Kezelés"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Aktív adatfolyamok",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Kövesse nyomon és vezérelje a feladatokat a `tasks/get` és `tasks/cancel` használatával."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "Az elmúlt 24 órában nem érkezett eszközhívás.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Aktiválja a kombót",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Fázis",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Aktív adatfolyamok",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "A jelenlegi szűrőkhöz nem található feladat.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Események",
"artifacts": "Artifacts"
},
"health": {
"title": "Rendszer egészsége",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Válassz előre beállított színt, vagy készíts saját témát egy színből",
"themeCreate": "Téma létrehozása",
"themeCustom": "Egyéni téma",
"themeCoral": "Korall",
"themeBlue": "Kék",
"themeRed": "Piros",
"themeGreen": "Zöld",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Ragadós határ",
"stickyLimitDesc": "Hívások fiókonként váltás előtt",
"modelAliases": "Modell álnevek",
"modelAliasesTitle": "Modell aliasok",
"modelAliasesDesc": "Helyettesítő karakter minták a modellnevek újratervezéséhez • Használja a * és a ?",
"addCustomAlias": "Egyéni Alias Hozzáadása",
"deprecatedModelId": "Elavult modell ID",
"newModelId": "Új modell ID",
"customAliases": "Egyéni aliasok",
"builtInAliases": "Beépített aliasok",
"backgroundDegradationTitle": "Háttérfeladat-degradáció",
"backgroundDegradationDesc": "Automatikusan felismeri a háttérfeladatokat (címek, összefoglalók) és olcsóbb modellekre irányítja",
"enableDegradation": "Háttérfeladat-degradáció engedélyezése",
"enableDegradationHint": "Ha engedélyezve van, a háttérfeladatok, mint a címek generálása és összefoglalások, automatikusan olcsóbb modellekre irányítódnak",
"tasksDetected": "Feladatok érzékelve",
"degradationMap": "Modell-degradáció térkép",
"premiumModel": "Prémium modell",
"cheapModel": "Olcsó modell",
"detectionPatterns": "Érzékelési minták",
"newPattern": "pl. \"generálj egy címet\"",
"aliasPatternPlaceholder": "claude-szonett-*",
"aliasTargetPlaceholder": "claude-szonett-4-20250514",
"pattern": "Minta",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "A gyorsítótár bejegyzéseinek létrehozására használt tokenek (vissza a beviteli sebességre)",
"customPricingNote": "Egyes modelleknél felülbírálhatja az alapértelmezett árazást. Az egyéni felülbírálások elsőbbséget élveznek az automatikusan észlelt árképzéssel szemben.",
"editPricing": "Árak szerkesztése",
"viewFullDetails": "Teljes részletek megtekintése",
"modelAliasesTitle": "Modell aliasok",
"addCustomAlias": "Egyéni Alias Hozzáadása",
"deprecatedModelId": "Elavult modell ID",
"newModelId": "Új modell ID",
"customAliases": "Egyéni aliasok",
"builtInAliases": "Beépített aliasok",
"backgroundDegradationTitle": "Háttérfeladat-degradáció",
"backgroundDegradationDesc": "Automatikusan felismeri a háttérfeladatokat (címek, összefoglalók) és olcsóbb modellekre irányítja",
"enableDegradation": "Háttérfeladat-degradáció engedélyezése",
"enableDegradationHint": "Ha engedélyezve van, a háttérfeladatok, mint a címek generálása és összefoglalások, automatikusan olcsóbb modellekre irányítódnak",
"tasksDetected": "Feladatok érzékelve",
"degradationMap": "Modell-degradáció térkép",
"premiumModel": "Prémium modell",
"cheapModel": "Olcsó modell",
"detectionPatterns": "Érzékelési minták",
"newPattern": "pl. \"generálj egy címet\""
"viewFullDetails": "Teljes részletek megtekintése"
},
"translator": {
"title": "Fordító",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Szolgáltatók",
"commonUseCases": "Gyakori használati esetek",
"clientCompatibility": "Kliens kompatibilitás",
"protocolsToc": "Protocols",
"apiReference": "API-referencia",
"method": "módszer",
"path": "Útvonal",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Használja",
"clientClaudeBullet1Middle": "(Claude) ill",
"clientClaudeBullet1Suffix": "(Antigravitációs) előtag.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Az A2A JSON-RPC használatával szinkronban vagy SSE adatfolyamon keresztül küldhet be feladatokat.",
"protocolA2aStep1": "Olvassa el `/.well-known/agent.json` az ügynök felfedezéséhez.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "OpenAI-kompatibilis csevegési végpont (alapértelmezett).",
"endpointResponsesNote": "Responses API-végpont (Codex, o-sorozat).",
"endpointModelsNote": "Modelkatalógus az összes csatlakoztatott szolgáltatóhoz.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "Az OmniRoute \"ahogy van\" mindenféle garancia nélkül biztosított. Nem vállalunk felelősséget az API használatából, a szolgáltatás megszakadásából vagy az adatvesztésből eredő költségekért. Mindig készítsen biztonsági másolatot a konfigurációjáról.",
"termsSection6Title": "6. Nyílt forráskód",
"termsSection6Text": "Az OmniRoute egy nyílt forráskódú szoftver. Ön szabadon megvizsgálhatja, módosíthatja és terjesztheti a licenc feltételei szerint."
},
"media": {
"title": "Média játszótér",
"subtitle": "Képek, videók és zene generálása",
"model": "Model",
"prompt": "Prompt",
"generate": "Generálás",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Kesehatan",
"limits": "Batas & Kuota",
"cliTools": "Alat CLI",
"media": "Media",
"settings": "Pengaturan",
"translator": "Penerjemah",
"docs": "dokumen",
"issues": "Masalah",
"endpoint": "Titik akhir",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Manajer API",
"logs": "Log",
"auditLog": "Catatan Audit",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Server proxy telah dihentikan atau dimulai ulang.",
"expandSidebar": "Luaskan bilah sisi",
"collapseSidebar": "Ciutkan bilah sisi",
"media": "Media"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Keluar",
@@ -108,10 +130,18 @@
"homeDescription": "Selamat datang di OmniRoute",
"endpoint": "Titik akhir",
"endpointDescription": "Konfigurasi titik akhir API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Pengaturan",
"settingsDescription": "Kelola preferensi Anda",
"openaiCompatible": "Kompatibel dengan OpenAI",
"anthropicCompatible": "Kompatibel Antropis"
"anthropicCompatible": "Kompatibel Antropis",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Mulai Cepat",
@@ -261,6 +291,21 @@
"showing": "Menampilkan entri {count} (mengimbangi {offset})",
"previous": "Sebelumnya"
},
"media": {
"title": "Playground Media",
"subtitle": "Hasilkan gambar, video, dan musik",
"model": "Model",
"prompt": "Prompt",
"generate": "Hasilkan",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Alat CLI",
"noActiveProviders": "Tidak ada penyedia aktif",
@@ -533,7 +578,75 @@
"saving": "Menyimpan...",
"weighted": "Tertimbang",
"leastUsed": "Paling Sedikit Digunakan",
"costOpt": "Pilihan Biaya"
"costOpt": "Pilihan Biaya",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Biaya",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Ubah teks menjadi ucapan yang terdengar alami",
"moderations": "Moderasi",
"moderationsDesc": "Moderasi konten dan klasifikasi keamanan",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "API Inti",
"categoryMedia": "Media & Multi-Modal",
"categoryUtility": "Utilitas & Manajemen",
"enableCloudTitle": "Aktifkan Proksi Cloud",
"whatYouGet": "Apa yang akan Anda dapatkan",
"cloudBenefitAccess": "Akses API Anda dari mana saja di dunia",
@@ -613,13 +733,154 @@
"image": "Gambar",
"custom": "adat",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "API Inti",
"categoryMedia": "Media & Multi-Modal",
"categoryUtility": "Utilitas & Manajemen"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Panggilan: {total} | halaman {page} dari {totalPages}",
"allTools": "Semua alat",
"allResults": "Semua hasil",
"success": "Kesuksesan",
"failure": "Kegagalan",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Memuat entri audit...",
"noAuditEntriesForFilters": "Tidak ada entri audit yang ditemukan untuk filter saat ini.",
"tableTimestamp": "Stempel waktu",
"tableDuration": "Lamanya",
"tableResult": "Hasil",
"tableApiKey": "Kunci API",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Kesehatan Sistem",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Pilih warna preset atau buat tema Anda sendiri dengan satu warna",
"themeCreate": "Buat tema",
"themeCustom": "Tema kustom",
"themeCoral": "Koral",
"themeBlue": "Biru",
"themeRed": "Merah",
"themeGreen": "Hijau",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Batas Lengket",
"stickyLimitDesc": "Panggilan per akun sebelum beralih",
"modelAliases": "Alias Model",
"modelAliasesTitle": "Alias Model",
"modelAliasesDesc": "Pola karakter pengganti untuk memetakan ulang nama model • Gunakan * dan ?",
"addCustomAlias": "Tambah Alias Kustom",
"deprecatedModelId": "ID model yang sudah usang",
"newModelId": "ID model baru",
"customAliases": "Alias Kustom",
"builtInAliases": "Alias Bawaan",
"backgroundDegradationTitle": "Degradasi Tugas Latar Belakang",
"backgroundDegradationDesc": "Deteksi otomatis tugas latar belakang (judul, ringkasan) dan arahkan ke model yang lebih murah",
"enableDegradation": "Aktifkan Degradasi Latar Belakang",
"enableDegradationHint": "Saat diaktifkan, tugas latar belakang seperti pembuatan judul dan ringkasan diarahkan ke model yang lebih murah secara otomatis",
"tasksDetected": "Tugas terdeteksi",
"degradationMap": "Peta Degradasi Model",
"premiumModel": "Model premium",
"cheapModel": "Model murah",
"detectionPatterns": "Pola Deteksi",
"newPattern": "cth. \"buat judul\"",
"aliasPatternPlaceholder": "claude-soneta-*",
"aliasTargetPlaceholder": "claude-soneta-4-20250514",
"pattern": "Pola",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Token yang digunakan untuk membuat entri cache (pengembalian ke tingkat input)",
"customPricingNote": "Anda dapat mengganti harga default untuk model tertentu. Penggantian khusus lebih diprioritaskan dibandingkan harga yang terdeteksi otomatis.",
"editPricing": "Sunting Harga",
"viewFullDetails": "Lihat Detail Lengkap",
"modelAliasesTitle": "Alias Model",
"addCustomAlias": "Tambah Alias Kustom",
"deprecatedModelId": "ID model yang sudah usang",
"newModelId": "ID model baru",
"customAliases": "Alias Kustom",
"builtInAliases": "Alias Bawaan",
"backgroundDegradationTitle": "Degradasi Tugas Latar Belakang",
"backgroundDegradationDesc": "Deteksi otomatis tugas latar belakang (judul, ringkasan) dan arahkan ke model yang lebih murah",
"enableDegradation": "Aktifkan Degradasi Latar Belakang",
"enableDegradationHint": "Saat diaktifkan, tugas latar belakang seperti pembuatan judul dan ringkasan diarahkan ke model yang lebih murah secara otomatis",
"tasksDetected": "Tugas terdeteksi",
"degradationMap": "Peta Degradasi Model",
"premiumModel": "Model premium",
"cheapModel": "Model murah",
"detectionPatterns": "Pola Deteksi",
"newPattern": "cth. \"buat judul\""
"viewFullDetails": "Lihat Detail Lengkap"
},
"translator": {
"title": "Penerjemah",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Penyedia",
"commonUseCases": "Kasus Penggunaan Umum",
"clientCompatibility": "Kompatibilitas Klien",
"protocolsToc": "Protocols",
"apiReference": "Referensi API",
"method": "Metode",
"path": "Jalan",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Gunakan",
"clientClaudeBullet1Middle": "(Claude) atau",
"clientClaudeBullet1Suffix": "Awalan (Antigravitasi).",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Titik akhir obrolan yang kompatibel dengan OpenAI (default).",
"endpointResponsesNote": "Titik akhir API respons (Codex, o-series).",
"endpointModelsNote": "Katalog model untuk semua penyedia yang terhubung.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute disediakan \"sebagaimana adanya\" tanpa jaminan apa pun. Kami tidak bertanggung jawab atas segala biaya yang timbul akibat penggunaan API, gangguan layanan, atau kehilangan data. Selalu simpan cadangan konfigurasi Anda.",
"termsSection6Title": "6. Sumber Terbuka",
"termsSection6Text": "OmniRoute adalah perangkat lunak sumber terbuka. Anda bebas memeriksa, memodifikasi, dan mendistribusikannya berdasarkan ketentuan lisensinya."
},
"media": {
"title": "Playground Media",
"subtitle": "Hasilkan gambar, video, dan musik",
"model": "Model",
"prompt": "Prompt",
"generate": "Hasilkan",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "स्वास्थ्य",
"limits": "सीमाएँ और कोटा",
"cliTools": "सीएलआई उपकरण",
"media": "मीडिया",
"settings": "सेटिंग्स",
"translator": "अनुवादक",
"docs": "दस्तावेज़",
"issues": "मुद्दे",
"endpoint": "समापन बिंदु",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "एपीआई प्रबंधक",
"logs": "लॉग",
"auditLog": "ऑडिट लॉग",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "प्रॉक्सी सर्वर बंद कर दिया गया है या पुनः प्रारंभ हो रहा है।",
"expandSidebar": "साइडबार का विस्तार करें",
"collapseSidebar": "साइडबार को संक्षिप्त करें",
"media": "मीडिया"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "लॉगआउट करें",
@@ -108,10 +130,18 @@
"homeDescription": "ओमनीरूट में आपका स्वागत है",
"endpoint": "समापन बिंदु",
"endpointDescription": "एपीआई समापन बिंदु विन्यास",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "सेटिंग्स",
"settingsDescription": "अपनी प्राथमिकताएँ प्रबंधित करें",
"openaiCompatible": "ओपनएआई संगत",
"anthropicCompatible": "एंथ्रोपिक संगत"
"anthropicCompatible": "एंथ्रोपिक संगत",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "त्वरित शुरुआत",
@@ -261,6 +291,21 @@
"showing": "{count} प्रविष्टियाँ दिखाई जा रही हैं (ऑफ़सेट {offset})",
"previous": "पिछला"
},
"media": {
"title": "मीडिया प्लेग्राउंड",
"subtitle": "छवियाँ, वीडियो और संगीत उत्पन्न करें",
"model": "Model",
"prompt": "Prompt",
"generate": "उत्पन्न करें",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "सीएलआई उपकरण",
"noActiveProviders": "कोई सक्रिय प्रदाता नहीं",
@@ -533,7 +578,75 @@
"saving": "सहेजा जा रहा है...",
"weighted": "भारित",
"leastUsed": "सबसे कम इस्तेमाल किया गया",
"costOpt": "लागत-विकल्प"
"costOpt": "लागत-विकल्प",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "लागत",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "पाठ को प्राकृतिक-ध्वनि वाले भाषण में बदलें",
"moderations": "संयम",
"moderationsDesc": "सामग्री मॉडरेशन और सुरक्षा वर्गीकरण",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "कोर API",
"categoryMedia": "मीडिया और मल्टी-मोडल",
"categoryUtility": "उपयोगिता और प्रबंधन",
"enableCloudTitle": "क्लाउड प्रॉक्सी सक्षम करें",
"whatYouGet": "तुम्हें क्या मिलेगा",
"cloudBenefitAccess": "दुनिया में कहीं से भी अपने एपीआई तक पहुंचें",
@@ -613,13 +733,154 @@
"image": "छवि",
"custom": "कस्टम",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "कोर API",
"categoryMedia": "मीडिया और मल्टी-मोडल",
"categoryUtility": "उपयोगिता और प्रबंधन"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Bagian titik akhir",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP dan A2A adalah titik akhir kelas satu dengan kemampuan observasi dan kontrol khusus.",
"mcpCardTitle": "Server MCP",
"mcpCardDescription": "Model Protokol Konteks melalui stdio",
"a2aCardTitle": "Server A2A",
"a2aCardDescription": "Titik akhir Agent2Agent JSON-RPC",
"protocolToolsLabel": "Peralatan",
"protocolTasksLabel": "Tugas",
"protocolActiveStreamsLabel": "Aliran aktif",
"protocolLastActivity": "Aktivitas terakhir",
"quickStart": "Mulai Cepat",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Aliran aktif",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "सिस्टम स्वास्थ्य",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "एक प्रीसेट रंग चुनें या एक ही रंग से अपनी थीम बनाएं",
"themeCreate": "थीम बनाएं",
"themeCustom": "कस्टम थीम",
"themeCoral": "Koral",
"themeBlue": "नीला",
"themeRed": "लाल",
"themeGreen": "हरा",
@@ -1181,7 +1441,23 @@
"stickyLimit": "चिपचिपी सीमा",
"stickyLimitDesc": "स्विच करने से पहले प्रति खाता कॉल",
"modelAliases": "मॉडल उपनाम",
"modelAliasesTitle": "Model Alias",
"modelAliasesDesc": "मॉडल नामों को रीमैप करने के लिए वाइल्डकार्ड पैटर्न • * और ? का उपयोग करें",
"addCustomAlias": "Kustom Alias Tambahkan",
"deprecatedModelId": "ID model yang tidak digunakan lagi",
"newModelId": "ID model baru",
"customAliases": "Alias Kustom",
"builtInAliases": "Alias Bawaan",
"backgroundDegradationTitle": "पृष्ठभूमि कार्य अवनमन",
"backgroundDegradationDesc": "पृष्ठभूमि कार्यों (शीर्षक, सारांश) को स्वचालित रूप से पहचानें और सस्ते मॉडल पर रूट करें",
"enableDegradation": "बैकग्राउंड डिग्रेडेशन सक्षम करें",
"enableDegradationHint": "जब सक्षम होता है, तो शीर्षक निर्माण और सारांश जैसे पृष्ठभूमि कार्य स्वचालित रूप से सस्ते मॉडल पर रूट किए जाते हैं",
"tasksDetected": "पता लगाए गए कार्य",
"degradationMap": "मॉडल अवनमन मानचित्र",
"premiumModel": "प्रीमियम मॉडल",
"cheapModel": "सस्ता मॉडल",
"detectionPatterns": "पता लगाने के पैटर्न",
"newPattern": "उदा. \"एक शीर्षक बनाएं\"",
"aliasPatternPlaceholder": "क्लाउड-सॉनेट-*",
"aliasTargetPlaceholder": "क्लाउड-सॉनेट-4-20250514",
"pattern": "पैटर्न",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "कैश प्रविष्टियाँ बनाने के लिए उपयोग किए जाने वाले टोकन (इनपुट दर पर फ़ॉलबैक)",
"customPricingNote": "आप विशिष्ट मॉडलों के लिए डिफ़ॉल्ट मूल्य निर्धारण को ओवरराइड कर सकते हैं। कस्टम ओवरराइड्स को स्वतः-पता लगाए गए मूल्य-निर्धारण पर प्राथमिकता दी जाती है।",
"editPricing": "मूल्य निर्धारण संपादित करें",
"viewFullDetails": "पूर्ण विवरण देखें",
"modelAliasesTitle": "Model Alias",
"addCustomAlias": "Kustom Alias Tambahkan",
"deprecatedModelId": "ID model yang tidak digunakan lagi",
"newModelId": "ID model baru",
"customAliases": "Alias Kustom",
"builtInAliases": "Alias Bawaan",
"backgroundDegradationTitle": "पृष्ठभूमि कार्य अवनमन",
"backgroundDegradationDesc": "पृष्ठभूमि कार्यों (शीर्षक, सारांश) को स्वचालित रूप से पहचानें और सस्ते मॉडल पर रूट करें",
"enableDegradation": "बैकग्राउंड डिग्रेडेशन सक्षम करें",
"enableDegradationHint": "जब सक्षम होता है, तो शीर्षक निर्माण और सारांश जैसे पृष्ठभूमि कार्य स्वचालित रूप से सस्ते मॉडल पर रूट किए जाते हैं",
"tasksDetected": "पता लगाए गए कार्य",
"degradationMap": "मॉडल अवनमन मानचित्र",
"premiumModel": "प्रीमियम मॉडल",
"cheapModel": "सस्ता मॉडल",
"detectionPatterns": "पता लगाने के पैटर्न",
"newPattern": "उदा. \"एक शीर्षक बनाएं\""
"viewFullDetails": "पूर्ण विवरण देखें"
},
"translator": {
"title": "अनुवादक",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "प्रदाता",
"commonUseCases": "सामान्य उपयोग के मामले",
"clientCompatibility": "ग्राहक अनुकूलता",
"protocolsToc": "Protocols",
"apiReference": "एपीआई संदर्भ",
"method": "विधि",
"path": "पथ",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "उपयोग करें",
"clientClaudeBullet1Middle": "(क्लाउड) या",
"clientClaudeBullet1Suffix": "(एंटीग्रेविटी) उपसर्ग।",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "OpenAI-संगत चैट समापन बिंदु (डिफ़ॉल्ट)।",
"endpointResponsesNote": "प्रतिक्रियाएँ एपीआई समापन बिंदु (कोडेक्स, ओ-श्रृंखला)।",
"endpointModelsNote": "सभी जुड़े हुए प्रदाताओं के लिए मॉडल कैटलॉग।",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "ओम्निरूट को किसी भी प्रकार की वारंटी के बिना \"जैसा है\" प्रदान किया जाता है। हम एपीआई उपयोग, सेवा व्यवधान या डेटा हानि के कारण होने वाली किसी भी लागत के लिए ज़िम्मेदार नहीं हैं। हमेशा अपने कॉन्फ़िगरेशन का बैकअप बनाए रखें।",
"termsSection6Title": "6. खुला स्रोत",
"termsSection6Text": "ओमनीरूट ओपन-सोर्स सॉफ्टवेयर है। आप इसके लाइसेंस की शर्तों के तहत इसका निरीक्षण, संशोधन और वितरण करने के लिए स्वतंत्र हैं।"
},
"media": {
"title": "मीडिया प्लेग्राउंड",
"subtitle": "छवियाँ, वीडियो और संगीत उत्पन्न करें",
"model": "Model",
"prompt": "Prompt",
"generate": "उत्पन्न करें",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Salute",
"limits": "Limiti e quote",
"cliTools": "Strumenti CLI",
"media": "Media",
"settings": "Impostazioni",
"translator": "Traduttore",
"docs": "Documenti",
"issues": "Problemi",
"endpoint": "Punto finale",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Gestore API",
"logs": "Registri",
"auditLog": "Registro di controllo",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Il server proxy è stato arrestato o si sta riavviando.",
"expandSidebar": "Espandi la barra laterale",
"collapseSidebar": "Comprimi la barra laterale",
"media": "Media"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Esci",
@@ -108,10 +130,18 @@
"homeDescription": "Benvenuti in OmniRoute",
"endpoint": "Punto finale",
"endpointDescription": "Configurazione dell'endpoint API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Impostazioni",
"settingsDescription": "Gestisci le tue preferenze",
"openaiCompatible": "Compatibile con OpenAI",
"anthropicCompatible": "Compatibile antropico"
"anthropicCompatible": "Compatibile antropico",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Avvio rapido",
@@ -261,6 +291,21 @@
"showing": "Visualizzazione delle voci {count} (offset {offset})",
"previous": "Precedente"
},
"media": {
"title": "Area Media",
"subtitle": "Genera immagini, video e musica",
"model": "Model",
"prompt": "Prompt",
"generate": "Genera",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Strumenti CLI",
"noActiveProviders": "Nessun fornitore attivo",
@@ -533,7 +578,75 @@
"saving": "Risparmio...",
"weighted": "Ponderato",
"leastUsed": "Meno usato",
"costOpt": "Opzione costo"
"costOpt": "Opzione costo",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Costi",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Converti il testo in parlato dal suono naturale",
"moderations": "Moderazioni",
"moderationsDesc": "Moderazione dei contenuti e classificazione della sicurezza",
"responsesDesc": "API Responses di OpenAI per Codex e workflow agentici avanzati",
"listModelsDesc": "Elenca tutti i modelli disponibili su tutti i provider connessi",
"settingsApiDesc": "Leggere e modificare la configurazione di OmniRoute tramite API",
"settingsApi": "Settings API",
"categoryCore": "API Principali",
"categoryMedia": "Media e Multi-Modale",
"categoryUtility": "Utilità e Gestione",
"enableCloudTitle": "Abilita proxy cloud",
"whatYouGet": "Cosa otterrai",
"cloudBenefitAccess": "Accedi alla tua API da qualsiasi parte del mondo",
@@ -613,13 +733,154 @@
"image": "Immagine",
"custom": "costume",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "API Responses di OpenAI per Codex e workflow agentici avanzati",
"listModelsDesc": "Elenca tutti i modelli disponibili su tutti i provider connessi",
"settingsApi": "Settings API",
"settingsApiDesc": "Leggere e modificare la configurazione di OmniRoute tramite API",
"categoryCore": "API Principali",
"categoryMedia": "Media e Multi-Modale",
"categoryUtility": "Utilità e Gestione"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Salute",
"ok": "OK",
"totalTasks": "Compiti totali",
"activeStreams": "Active streams",
"lastTask": "Ultimo compito",
"taskStateOverview": "Panoramica dello stato dell'attività",
"state": {
"submitted": "presentato",
"working": "lavorando",
"completed": "completato",
"failed": "failed",
"cancelled": "annullato"
},
"agentCard": "Carta dell'agente",
"version": "Versione",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Salute del sistema",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Scegli un colore predefinito o crea il tuo tema con un solo colore",
"themeCreate": "Crea tema",
"themeCustom": "Tema personalizzato",
"themeCoral": "Corallo",
"themeBlue": "Blu",
"themeRed": "Rosso",
"themeGreen": "Verde",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Limite appiccicoso",
"stickyLimitDesc": "Chiamate per account prima del cambio",
"modelAliases": "Alias del modello",
"modelAliasesTitle": "Alias dei Modelli",
"modelAliasesDesc": "Modelli di caratteri jolly per rimappare i nomi dei modelli • Utilizzare * e ?",
"addCustomAlias": "Aggiungi Alias Personalizzato",
"deprecatedModelId": "ID modello deprecato",
"newModelId": "Nuovo ID modello",
"customAliases": "Alias Personalizzati",
"builtInAliases": "Alias Integrati",
"backgroundDegradationTitle": "Degradazione Attività in Background",
"backgroundDegradationDesc": "Rileva automaticamente le attività in background (titoli, riassunti) e reindirizza a modelli più economici",
"enableDegradation": "Abilita Degradazione in Background",
"enableDegradationHint": "Quando abilitato, le attività in background come generazione titoli e riassunti vengono reindirizzate automaticamente a modelli più economici",
"tasksDetected": "Attività rilevate",
"degradationMap": "Mappa di Degradazione dei Modelli",
"premiumModel": "Modello premium",
"cheapModel": "Modello economico",
"detectionPatterns": "Pattern di Rilevamento",
"newPattern": "es: \"genera un titolo\"",
"aliasPatternPlaceholder": "claude-sonetto-*",
"aliasTargetPlaceholder": "claude-sonetto-4-20250514",
"pattern": "Modello",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Token utilizzati per creare voci nella cache (fallback alla velocità di input)",
"customPricingNote": "Puoi sostituire i prezzi predefiniti per modelli specifici. Le sostituzioni personalizzate hanno la priorità sui prezzi rilevati automaticamente.",
"editPricing": "Modifica prezzi",
"viewFullDetails": "Visualizza i dettagli completi",
"modelAliasesTitle": "Alias dei Modelli",
"addCustomAlias": "Aggiungi Alias Personalizzato",
"deprecatedModelId": "ID modello deprecato",
"newModelId": "Nuovo ID modello",
"customAliases": "Alias Personalizzati",
"builtInAliases": "Alias Integrati",
"backgroundDegradationTitle": "Degradazione Attività in Background",
"backgroundDegradationDesc": "Rileva automaticamente le attività in background (titoli, riassunti) e reindirizza a modelli più economici",
"enableDegradation": "Abilita Degradazione in Background",
"enableDegradationHint": "Quando abilitato, le attività in background come generazione titoli e riassunti vengono reindirizzate automaticamente a modelli più economici",
"tasksDetected": "Attività rilevate",
"degradationMap": "Mappa di Degradazione dei Modelli",
"premiumModel": "Modello premium",
"cheapModel": "Modello economico",
"detectionPatterns": "Pattern di Rilevamento",
"newPattern": "es: \"genera un titolo\""
"viewFullDetails": "Visualizza i dettagli completi"
},
"translator": {
"title": "Traduttore",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Fornitori",
"commonUseCases": "Casi d'uso comuni",
"clientCompatibility": "Compatibilità con il cliente",
"protocolsToc": "Protocols",
"apiReference": "Riferimento API",
"method": "Metodo",
"path": "Sentiero",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Utilizzo",
"clientClaudeBullet1Middle": "(Claude) o",
"clientClaudeBullet1Suffix": "(Antigravità).",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Endpoint chat compatibile con OpenAI (impostazione predefinita).",
"endpointResponsesNote": "Endpoint API di risposta (Codex, serie o).",
"endpointModelsNote": "Catalogo dei modelli per tutti i fornitori collegati.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute viene fornito \"così com'è\" senza garanzie di alcun tipo. Non siamo responsabili per eventuali costi sostenuti per l'utilizzo dell'API, interruzioni del servizio o perdita di dati. Mantieni sempre i backup della tua configurazione.",
"termsSection6Title": "6. Sorgente aperta",
"termsSection6Text": "OmniRoute è un software open source. Sei libero di esaminarlo, modificarlo e distribuirlo secondo i termini della sua licenza."
},
"media": {
"title": "Area Media",
"subtitle": "Genera immagini, video e musica",
"model": "Model",
"prompt": "Prompt",
"generate": "Genera",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "健康",
"limits": "制限と割り当て",
"cliTools": "CLIツール",
"media": "メディア",
"settings": "設定",
"translator": "翻訳者",
"docs": "ドキュメント",
"issues": "問題点",
"endpoint": "エンドポイント",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "APIマネージャー",
"logs": "ログ",
"auditLog": "監査ログ",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "プロキシ サーバーが停止しているか、再起動中です。",
"expandSidebar": "サイドバーを展開する",
"collapseSidebar": "サイドバーを折りたたむ",
"media": "メディア"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "ログアウト",
@@ -108,10 +130,18 @@
"homeDescription": "オムニルートへようこそ",
"endpoint": "エンドポイント",
"endpointDescription": "APIエンドポイント構成",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "設定",
"settingsDescription": "設定を管理します",
"openaiCompatible": "OpenAI対応",
"anthropicCompatible": "Anthropic 互換"
"anthropicCompatible": "Anthropic 互換",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "クイックスタート",
@@ -261,6 +291,21 @@
"showing": "{count} エントリを表示しています (オフセット {offset})",
"previous": "前へ"
},
"media": {
"title": "メディアプレイグラウンド",
"subtitle": "画像、動画、音楽を生成",
"model": "Model",
"prompt": "Prompt",
"generate": "生成",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLIツール",
"noActiveProviders": "アクティブなプロバイダーはありません",
@@ -533,7 +578,75 @@
"saving": "保存中...",
"weighted": "加重",
"leastUsed": "最も使用頻度の低いもの",
"costOpt": "コスト最適化"
"costOpt": "コスト最適化",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "コスト",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "テキストを自然な音声に変換する",
"moderations": "モデレーション",
"moderationsDesc": "コンテンツの管理と安全性の分類",
"responsesDesc": "Codexおよび高度なエージェントワークフロー向けOpenAI Responses API",
"listModelsDesc": "接続されたすべてのプロバイダーの利用可能なモデルを一覧表示",
"settingsApiDesc": "API経由でOmniRouteの設定を読み取り・変更",
"settingsApi": "Settings API",
"categoryCore": "コアAPI",
"categoryMedia": "メディア&マルチモーダル",
"categoryUtility": "ユーティリティ&管理",
"enableCloudTitle": "クラウドプロキシを有効にする",
"whatYouGet": "得られるもの",
"cloudBenefitAccess": "世界中のどこからでも API にアクセス",
@@ -613,13 +733,154 @@
"image": "画像",
"custom": "カスタム",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "Codexおよび高度なエージェントワークフロー向けOpenAI Responses API",
"listModelsDesc": "接続されたすべてのプロバイダーの利用可能なモデルを一覧表示",
"settingsApi": "Settings API",
"settingsApiDesc": "API経由でOmniRouteの設定を読み取り・変更",
"categoryCore": "コアAPI",
"categoryMedia": "メディア&マルチモーダル",
"categoryUtility": "ユーティリティ&管理"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "{action} コンボ「{combo}」を確認しますか?",
"switchComboFailed": "コンボ状態の切り替えに失敗しました。",
"switchComboSuccess": "コンボ「{combo}」を更新しました。",
"confirmApplyProfile": "復元プロファイル「{profile}」を適用しますか?",
"applyProfileFailed": "復元プロファイルの適用に失敗しました。",
"applyProfileSuccess": "プロファイル「{profile}」が適用されました。",
"confirmResetBreakers": "すべてのサーキットブレーカーをリセットしますか?",
"resetBreakersFailed": "サーキットブレーカーのリセットに失敗しました。",
"resetBreakersSuccess": "サーキットブレーカーがリセットされました。",
"processStatus": "プロセスステータス",
"online": "オンライン",
"offline": "オフライン",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "システムの健全性",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "プリセットカラーを選ぶか、1色で独自のテーマを作成します",
"themeCreate": "テーマを作成",
"themeCustom": "カスタムテーマ",
"themeCoral": "コーラル",
"themeBlue": "青",
"themeRed": "赤",
"themeGreen": "緑",
@@ -1181,7 +1441,23 @@
"stickyLimit": "スティッキー制限",
"stickyLimitDesc": "切り替える前のアカウントごとの通話数",
"modelAliases": "モデルのエイリアス",
"modelAliasesTitle": "モデルエイリアス",
"modelAliasesDesc": "モデル名を再マッピングするワイルドカード パターン • * と ? を使用します。",
"addCustomAlias": "カスタムエイリアスを追加",
"deprecatedModelId": "非推奨モデルID",
"newModelId": "新しいモデルID",
"customAliases": "カスタムエイリアス",
"builtInAliases": "組み込みエイリアス",
"backgroundDegradationTitle": "バックグラウンドタスク降格",
"backgroundDegradationDesc": "バックグラウンドタスク(タイトル、要約)を自動検出し、安価なモデルにルーティング",
"enableDegradation": "バックグラウンド降格を有効化",
"enableDegradationHint": "有効にすると、タイトル生成や要約などのバックグラウンドタスクが自動的に安価なモデルにルーティングされます",
"tasksDetected": "検出されたタスク",
"degradationMap": "モデル降格マップ",
"premiumModel": "プレミアムモデル",
"cheapModel": "安価なモデル",
"detectionPatterns": "検出パターン",
"newPattern": "例:\"タイトルを生成\"",
"aliasPatternPlaceholder": "クロード・ソネット-*",
"aliasTargetPlaceholder": "クロード・ソネット-4-20250514",
"pattern": "パターン",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "キャッシュ エントリの作成に使用されるトークン (入力レートへのフォールバック)",
"customPricingNote": "特定のモデルのデフォルトの価格をオーバーライドできます。カスタム オーバーライドは、自動検出された価格設定よりも優先されます。",
"editPricing": "価格の編集",
"viewFullDetails": "詳細を表示",
"modelAliasesTitle": "モデルエイリアス",
"addCustomAlias": "カスタムエイリアスを追加",
"deprecatedModelId": "非推奨モデルID",
"newModelId": "新しいモデルID",
"customAliases": "カスタムエイリアス",
"builtInAliases": "組み込みエイリアス",
"backgroundDegradationTitle": "バックグラウンドタスク降格",
"backgroundDegradationDesc": "バックグラウンドタスク(タイトル、要約)を自動検出し、安価なモデルにルーティング",
"enableDegradation": "バックグラウンド降格を有効化",
"enableDegradationHint": "有効にすると、タイトル生成や要約などのバックグラウンドタスクが自動的に安価なモデルにルーティングされます",
"tasksDetected": "検出されたタスク",
"degradationMap": "モデル降格マップ",
"premiumModel": "プレミアムモデル",
"cheapModel": "安価なモデル",
"detectionPatterns": "検出パターン",
"newPattern": "例:\"タイトルを生成\""
"viewFullDetails": "詳細を表示"
},
"translator": {
"title": "翻訳者",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "プロバイダー",
"commonUseCases": "一般的な使用例",
"clientCompatibility": "クライアントの互換性",
"protocolsToc": "Protocols",
"apiReference": "APIリファレンス",
"method": "方法",
"path": "パス",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "使用する",
"clientClaudeBullet1Middle": "(クロード)または",
"clientClaudeBullet1Suffix": "(反重力) 接頭辞。",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "OpenAI 互換のチャット エンドポイント (デフォルト)。",
"endpointResponsesNote": "応答 API エンドポイント (Codex、o シリーズ)。",
"endpointModelsNote": "接続されているすべてのプロバイダーのモデル カタログ。",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute は、いかなる種類の保証もなく「現状のまま」提供されます。 API の使用、サービスの中断、またはデータの損失によって発生する費用については、当社は責任を負いません。構成のバックアップを常に維持してください。",
"termsSection6Title": "6. オープンソース",
"termsSection6Text": "OmniRoute はオープンソース ソフトウェアです。ライセンス条項に基づいて、自由に検査、変更、配布することができます。"
},
"media": {
"title": "メディアプレイグラウンド",
"subtitle": "画像、動画、音楽を生成",
"model": "Model",
"prompt": "Prompt",
"generate": "生成",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "건강",
"limits": "한도 및 할당량",
"cliTools": "CLI 도구",
"media": "미디어",
"settings": "설정",
"translator": "번역기",
"docs": "문서",
"issues": "문제",
"endpoint": "엔드포인트",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API 관리자",
"logs": "로그",
"auditLog": "감사 로그",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "프록시 서버가 중지되었거나 다시 시작되는 중입니다.",
"expandSidebar": "사이드바 확장",
"collapseSidebar": "사이드바 접기",
"media": "미디어"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "로그아웃",
@@ -108,10 +130,18 @@
"homeDescription": "OmniRoute에 오신 것을 환영합니다",
"endpoint": "엔드포인트",
"endpointDescription": "API 엔드포인트 구성",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "설정",
"settingsDescription": "환경설정 관리",
"openaiCompatible": "OpenAI 호환",
"anthropicCompatible": "인류 친화적"
"anthropicCompatible": "인류 친화적",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "빠른 시작",
@@ -261,6 +291,21 @@
"showing": "{count} 항목 표시 중(오프셋 {offset})",
"previous": "이전"
},
"media": {
"title": "미디어 플레이그라운드",
"subtitle": "이미지, 비디오, 음악 생성",
"model": "Model",
"prompt": "Prompt",
"generate": "생성",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI 도구",
"noActiveProviders": "활성 제공업체 없음",
@@ -533,7 +578,75 @@
"saving": "저장 중...",
"weighted": "가중",
"leastUsed": "가장 적게 사용됨",
"costOpt": "비용 최적화"
"costOpt": "비용 최적화",
"strategyGuideTitle": "이 전략을 사용하는 방법",
"strategyGuideWhen": "언제 사용하나요?",
"strategyGuideAvoid": "다음과 같은 경우에는 피하세요.",
"strategyGuideExample": "예",
"strategyGuide": {
"priority": {
"when": "선호하는 모델이 하나 있고 실패 시 폴백만 원합니다.",
"avoid": "모델 전반에 걸쳐 요청 배포가 필요합니다.",
"example": "가동 중단 시 백업 비용이 더 저렴한 기본 코딩 모델입니다."
},
"weighted": {
"when": "모델 간에 제어된 트래픽 분할이 필요합니다.",
"avoid": "시간이 지나도 정확한 체중을 유지할 수 없습니다.",
"example": "80% 안정적인 모델 + 20% 카나리아 모델 출시."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "비용",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "텍스트를 자연스러운 음성으로 변환",
"moderations": "조정",
"moderationsDesc": "콘텐츠 조정 및 안전 분류",
"responsesDesc": "Codex 및 고급 에이전트 워크플로용 OpenAI Responses API",
"listModelsDesc": "연결된 모든 공급자의 사용 가능한 모든 모델 나열",
"settingsApiDesc": "API를 통해 OmniRoute 구성 읽기 및 수정",
"settingsApi": "Settings API",
"categoryCore": "핵심 API",
"categoryMedia": "미디어 및 멀티모달",
"categoryUtility": "유틸리티 및 관리",
"enableCloudTitle": "클라우드 프록시 활성화",
"whatYouGet": "당신이 얻을 것입니다",
"cloudBenefitAccess": "전 세계 어디에서나 API에 액세스하세요",
@@ -613,13 +733,154 @@
"image": "이미지",
"custom": "관습",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "Codex 및 고급 에이전트 워크플로용 OpenAI Responses API",
"listModelsDesc": "연결된 모든 공급자의 사용 가능한 모든 모델 나열",
"settingsApi": "Settings API",
"settingsApiDesc": "API를 통해 OmniRoute 구성 읽기 및 수정",
"categoryCore": "핵심 API",
"categoryMedia": "미디어 및 멀티모달",
"categoryUtility": "유틸리티 및 관리"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "현재 필터에 대한 작업을 찾을 수 없습니다.",
"tableTask": "일",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "행위",
"view": "보다",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "작업 세부정보",
"close": "닫다",
"metadata": "메타데이터",
"events": "이벤트",
"artifacts": "유물"
},
"health": {
"title": "시스템 상태",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "미리 설정된 색상을 선택하거나 단일 색상으로 나만의 테마를 만드세요",
"themeCreate": "테마 만들기",
"themeCustom": "사용자 지정 테마",
"themeCoral": "코랄",
"themeBlue": "파랑",
"themeRed": "빨강",
"themeGreen": "초록",
@@ -1181,7 +1441,23 @@
"stickyLimit": "고정 한도",
"stickyLimitDesc": "전환 전 계정당 통화",
"modelAliases": "모델 별칭",
"modelAliasesTitle": "모델 별칭",
"modelAliasesDesc": "모델 이름을 다시 매핑하는 와일드카드 패턴 • * 및 ?를 사용합니다.",
"addCustomAlias": "사용자 지정 별칭 추가",
"deprecatedModelId": "사용 중단된 모델 ID",
"newModelId": "새 모델 ID",
"customAliases": "사용자 지정 별칭",
"builtInAliases": "기본 제공 별칭",
"backgroundDegradationTitle": "백그라운드 작업 다운그레이드",
"backgroundDegradationDesc": "백그라운드 작업(제목, 요약)을 자동 감지하여 저렴한 모델로 라우팅",
"enableDegradation": "백그라운드 다운그레이드 활성화",
"enableDegradationHint": "활성화하면 제목 생성 및 요약과 같은 백그라운드 작업이 자동으로 저렴한 모델로 라우팅됩니다",
"tasksDetected": "감지된 작업",
"degradationMap": "모델 다운그레이드 맵",
"premiumModel": "프리미엄 모델",
"cheapModel": "저렴한 모델",
"detectionPatterns": "감지 패턴",
"newPattern": "예: \"제목 생성\"",
"aliasPatternPlaceholder": "클로드-소네트-*",
"aliasTargetPlaceholder": "클로드 소네트-4-20250514",
"pattern": "패턴",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "캐시 항목을 생성하는 데 사용되는 토큰(입력 속도로 대체)",
"customPricingNote": "특정 모델의 기본 가격을 재정의할 수 있습니다. 맞춤 재정의는 자동 감지된 가격보다 우선 적용됩니다.",
"editPricing": "가격 편집",
"viewFullDetails": "전체 세부정보 보기",
"modelAliasesTitle": "모델 별칭",
"addCustomAlias": "사용자 지정 별칭 추가",
"deprecatedModelId": "사용 중단된 모델 ID",
"newModelId": "새 모델 ID",
"customAliases": "사용자 지정 별칭",
"builtInAliases": "기본 제공 별칭",
"backgroundDegradationTitle": "백그라운드 작업 다운그레이드",
"backgroundDegradationDesc": "백그라운드 작업(제목, 요약)을 자동 감지하여 저렴한 모델로 라우팅",
"enableDegradation": "백그라운드 다운그레이드 활성화",
"enableDegradationHint": "활성화하면 제목 생성 및 요약과 같은 백그라운드 작업이 자동으로 저렴한 모델로 라우팅됩니다",
"tasksDetected": "감지된 작업",
"degradationMap": "모델 다운그레이드 맵",
"premiumModel": "프리미엄 모델",
"cheapModel": "저렴한 모델",
"detectionPatterns": "감지 패턴",
"newPattern": "예: \"제목 생성\""
"viewFullDetails": "전체 세부정보 보기"
},
"translator": {
"title": "번역기",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "공급자",
"commonUseCases": "일반적인 사용 사례",
"clientCompatibility": "클라이언트 호환성",
"protocolsToc": "Protocols",
"apiReference": "API 참조",
"method": "방법",
"path": "경로",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "사용",
"clientClaudeBullet1Middle": "(클로드) 또는",
"clientClaudeBullet1Suffix": "(반중력) 접두사.",
"protocolsTitle": "프로토콜: MCP 및 A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "OpenAI 호환 채팅 엔드포인트(기본값)",
"endpointResponsesNote": "응답 API 엔드포인트(Codex, o-시리즈).",
"endpointModelsNote": "연결된 모든 공급자의 모델 카탈로그입니다.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute는 어떠한 종류의 보증도 없이 \"있는 그대로\" 제공됩니다. API 사용, 서비스 중단 또는 데이터 손실로 인해 발생하는 비용에 대해 당사는 책임을 지지 않습니다. 항상 구성의 백업을 유지하십시오.",
"termsSection6Title": "6. 오픈 소스",
"termsSection6Text": "OmniRoute는 오픈 소스 소프트웨어입니다. 라이센스 조건에 따라 자유롭게 검사, 수정 및 배포할 수 있습니다."
},
"media": {
"title": "미디어 플레이그라운드",
"subtitle": "이미지, 비디오, 음악 생성",
"model": "Model",
"prompt": "Prompt",
"generate": "생성",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Kesihatan",
"limits": "Had & Kuota",
"cliTools": "Alat CLI",
"media": "Media",
"settings": "tetapan",
"translator": "Penterjemah",
"docs": "Dokumen",
"issues": "Isu",
"endpoint": "Titik akhir",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Pengurus API",
"logs": "Log",
"auditLog": "Log Audit",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Pelayan proksi telah dihentikan atau dimulakan semula.",
"expandSidebar": "Kembangkan bar sisi",
"collapseSidebar": "Runtuhkan bar sisi",
"media": "Media"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Log keluar",
@@ -108,10 +130,18 @@
"homeDescription": "Selamat datang ke OmniRoute",
"endpoint": "Titik akhir",
"endpointDescription": "Konfigurasi titik akhir API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "tetapan",
"settingsDescription": "Urus pilihan anda",
"openaiCompatible": "Serasi OpenAI",
"anthropicCompatible": "Serasi Anthropic"
"anthropicCompatible": "Serasi Anthropic",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Mula Pantas",
@@ -261,6 +291,21 @@
"showing": "Menunjukkan entri {count} (mengimbangi {offset})",
"previous": "Sebelumnya"
},
"media": {
"title": "Ruang Media",
"subtitle": "Jana imej, video dan muzik",
"model": "Model",
"prompt": "Prompt",
"generate": "Jana",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Alat CLI",
"noActiveProviders": "Tiada pembekal aktif",
@@ -533,7 +578,75 @@
"saving": "Menyimpan...",
"weighted": "Ditimbang",
"leastUsed": "Paling Kurang Digunakan",
"costOpt": "Kos-Opt"
"costOpt": "Kos-Opt",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Kos",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Tukar teks kepada pertuturan yang berbunyi semula jadi",
"moderations": "Kesederhanaan",
"moderationsDesc": "Penyederhanaan kandungan dan klasifikasi keselamatan",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "API Teras",
"categoryMedia": "Media & Multi-Modal",
"categoryUtility": "Utiliti & Pengurusan",
"enableCloudTitle": "Dayakan Cloud Proxy",
"whatYouGet": "Apa yang anda akan dapat",
"cloudBenefitAccess": "Akses API anda dari mana-mana sahaja di dunia",
@@ -613,13 +733,154 @@
"image": "Imej",
"custom": "adat",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "API Teras",
"categoryMedia": "Media & Multi-Modal",
"categoryUtility": "Utiliti & Pengurusan"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Aliran aktif",
"protocolLastActivity": "Aktiviti terakhir",
"quickStart": "Mula Pantas",
"openMcpDashboard": "Buka pengurusan MCP",
"openA2aDashboard": "Buka pengurusan A2A",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Jalankan pelayan MCP melalui `omniroute --mcp`.",
"mcpQuickStartStep2": "Konfigurasikan klien MCP anda untuk menyambung melalui pengangkutan stdio.",
"mcpQuickStartStep3": "Panggil alatan seperti `omniroute_get_health` dan `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Mula Pantas",
"a2aQuickStartStep1": "Temui kad ejen di `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Hantar permintaan JSON-RPC ke `POST /a2a` menggunakan `message/send` atau `message/stream`.",
"a2aQuickStartStep3": "Jejak dan kawal tugas menggunakan `tasks/get` dan `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "aktifkan",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Aliran aktif",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Kesihatan Sistem",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Pilih warna pratetap atau cipta tema anda sendiri dengan satu warna",
"themeCreate": "Cipta tema",
"themeCustom": "Tema tersuai",
"themeCoral": "Koral",
"themeBlue": "Biru",
"themeRed": "Merah",
"themeGreen": "Hijau",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Had Melekit",
"stickyLimitDesc": "Panggilan setiap akaun sebelum bertukar",
"modelAliases": "Alias Model",
"modelAliasesTitle": "Alias Model",
"modelAliasesDesc": "Corak kad liar untuk memetakan semula nama model • Gunakan * dan ?",
"addCustomAlias": "Tambah Alias Tersuai",
"deprecatedModelId": "ID model yang ditamatkan",
"newModelId": "ID model baharu",
"customAliases": "Alias Tersuai",
"builtInAliases": "Alias Terbina Dalam",
"backgroundDegradationTitle": "Degradasi Tugas Latar Belakang",
"backgroundDegradationDesc": "Kesan tugas latar belakang secara automatik (tajuk, ringkasan) dan halakan ke model yang lebih murah",
"enableDegradation": "Dayakan Degradasi Latar Belakang",
"enableDegradationHint": "Apabila diaktifkan, tugas latar belakang seperti penjanaan tajuk dan ringkasan dihalakan ke model yang lebih murah secara automatik",
"tasksDetected": "Tugas dikesan",
"degradationMap": "Peta Degradasi Model",
"premiumModel": "Model premium",
"cheapModel": "Model murah",
"detectionPatterns": "Corak Pengesanan",
"newPattern": "cth. \"jana tajuk\"",
"aliasPatternPlaceholder": "claude-sonnet-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Corak",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Token yang digunakan untuk mencipta entri cache (sandar kepada kadar input)",
"customPricingNote": "Anda boleh mengatasi harga lalai untuk model tertentu. Penggantian tersuai diutamakan berbanding harga yang dikesan secara automatik.",
"editPricing": "Edit Harga",
"viewFullDetails": "Lihat Butiran Penuh",
"modelAliasesTitle": "Alias Model",
"addCustomAlias": "Tambah Alias Tersuai",
"deprecatedModelId": "ID model yang ditamatkan",
"newModelId": "ID model baharu",
"customAliases": "Alias Tersuai",
"builtInAliases": "Alias Terbina Dalam",
"backgroundDegradationTitle": "Degradasi Tugas Latar Belakang",
"backgroundDegradationDesc": "Kesan tugas latar belakang secara automatik (tajuk, ringkasan) dan halakan ke model yang lebih murah",
"enableDegradation": "Dayakan Degradasi Latar Belakang",
"enableDegradationHint": "Apabila diaktifkan, tugas latar belakang seperti penjanaan tajuk dan ringkasan dihalakan ke model yang lebih murah secara automatik",
"tasksDetected": "Tugas dikesan",
"degradationMap": "Peta Degradasi Model",
"premiumModel": "Model premium",
"cheapModel": "Model murah",
"detectionPatterns": "Corak Pengesanan",
"newPattern": "cth. \"jana tajuk\""
"viewFullDetails": "Lihat Butiran Penuh"
},
"translator": {
"title": "Penterjemah",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Pembekal",
"commonUseCases": "Kes Penggunaan Biasa",
"clientCompatibility": "Keserasian Pelanggan",
"protocolsToc": "Protocols",
"apiReference": "Rujukan API",
"method": "Kaedah",
"path": "Laluan",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "guna",
"clientClaudeBullet1Middle": "(Claude) atau",
"clientClaudeBullet1Suffix": "(Antigraviti) awalan.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Titik akhir sembang serasi OpenAI (lalai).",
"endpointResponsesNote": "Titik akhir API Respons (Codex, o-siri).",
"endpointModelsNote": "Katalog model untuk semua pembekal yang disambungkan.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute disediakan \"seadanya\" tanpa sebarang jenis waranti. Kami tidak bertanggungjawab untuk sebarang kos yang ditanggung melalui penggunaan API, gangguan perkhidmatan atau kehilangan data. Sentiasa kekalkan sandaran konfigurasi anda.",
"termsSection6Title": "6. Sumber Terbuka",
"termsSection6Text": "OmniRoute ialah perisian sumber terbuka. Anda bebas untuk memeriksa, mengubah suai dan mengedarkannya di bawah syarat lesennya."
},
"media": {
"title": "Ruang Media",
"subtitle": "Jana imej, video dan muzik",
"model": "Model",
"prompt": "Prompt",
"generate": "Jana",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Gezondheid",
"limits": "Limieten en quota's",
"cliTools": "CLI-hulpmiddelen",
"media": "Media",
"settings": "Instellingen",
"translator": "Vertaler",
"docs": "Documenten",
"issues": "Problemen",
"endpoint": "Eindpunt",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API-beheerder",
"logs": "Logboeken",
"auditLog": "Auditlogboek",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "De proxyserver is gestopt of wordt opnieuw opgestart.",
"expandSidebar": "Vouw zijbalk uit",
"collapseSidebar": "Zijbalk samenvouwen",
"media": "Media"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Actief thema"
},
"header": {
"logout": "Uitloggen",
@@ -108,10 +130,18 @@
"homeDescription": "Welkom bij OmniRoute",
"endpoint": "Eindpunt",
"endpointDescription": "API-eindpuntconfiguratie",
"mcp": "MCP-beheer",
"mcpDescription": "Bewaak het MCP-serverproces, de tools en de operationele controles",
"a2a": "A2A-beheer",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Instellingen",
"settingsDescription": "Beheer uw voorkeuren",
"openaiCompatible": "OpenAI-compatibel",
"anthropicCompatible": "Antropisch compatibel"
"anthropicCompatible": "Antropisch compatibel",
"media": "Media",
"mediaDescription": "Genereer afbeeldingen, video's en muziek",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Snel beginnen",
@@ -261,6 +291,21 @@
"showing": "{count} items tonen (offset {offset})",
"previous": "Vorige"
},
"media": {
"title": "Media-werkplaats",
"subtitle": "Genereer afbeeldingen, videos en muziek",
"model": "Model",
"prompt": "Prompt",
"generate": "Genereren",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI-hulpmiddelen",
"noActiveProviders": "Geen actieve aanbieders",
@@ -533,7 +578,75 @@
"saving": "Opslaan...",
"weighted": "Gewogen",
"leastUsed": "Minst gebruikt",
"costOpt": "Kosten-opt"
"costOpt": "Kosten-opt",
"strategyGuideTitle": "Hoe deze strategie te gebruiken",
"strategyGuideWhen": "Wanneer te gebruiken",
"strategyGuideAvoid": "Vermijd wanneer",
"strategyGuideExample": "Voorbeeld",
"strategyGuide": {
"priority": {
"when": "U heeft één voorkeursmodel en wilt alleen terugvallen op mislukkingen.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Kosten",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Converteer tekst naar natuurlijk klinkende spraak",
"moderations": "Moderaties",
"moderationsDesc": "Contentmoderatie en veiligheidsclassificatie",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Kern-API's",
"categoryMedia": "Media & Multi-Modaal",
"categoryUtility": "Hulpmiddelen & Beheer",
"enableCloudTitle": "Schakel Cloudproxy in",
"whatYouGet": "Wat je krijgt",
"cloudBenefitAccess": "Krijg overal ter wereld toegang tot uw API",
@@ -613,13 +733,154 @@
"image": "Afbeelding",
"custom": "gewoonte",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Kern-API's",
"categoryMedia": "Media & Multi-Modaal",
"categoryUtility": "Hulpmiddelen & Beheer"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agentenkaart",
"version": "Versie",
"url": "URL",
"capabilities": "Mogelijkheden",
"agentCardNotAvailable": "Agentenkaart niet beschikbaar.",
"quickValidation": "Snelle validatie",
"quickValidationDescription": "Voert rookoproepen uit via het live `/a2a` eindpunt.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Systeemgezondheid",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Kies een vooraf ingestelde kleur of maak je eigen thema met één kleur",
"themeCreate": "Thema maken",
"themeCustom": "Aangepast thema",
"themeCoral": "Koraal",
"themeBlue": "Blauw",
"themeRed": "Rood",
"themeGreen": "Groen",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Kleverige limiet",
"stickyLimitDesc": "Gesprekken per account voordat u overstapt",
"modelAliases": "Modelaliassen",
"modelAliasesTitle": "Model Aliases",
"modelAliasesDesc": "Jokertekenpatronen om modelnamen opnieuw toe te wijzen • Gebruik * en ?",
"addCustomAlias": "Aangepast Alias Toevoegen",
"deprecatedModelId": "Verouderd model-ID",
"newModelId": "Nieuw model-ID",
"customAliases": "Aangepaste Aliases",
"builtInAliases": "Ingebouwde Aliases",
"backgroundDegradationTitle": "Achtergrondtaak Degradatie",
"backgroundDegradationDesc": "Detecteert automatisch achtergrondtaken (titels, samenvattingen) en routeert naar goedkopere modellen",
"enableDegradation": "Achtergrond Degradatie Inschakelen",
"enableDegradationHint": "Wanneer ingeschakeld, worden achtergrondtaken zoals titelgeneratie en samenvattingen automatisch naar goedkopere modellen gerouteerd",
"tasksDetected": "Taken gedetecteerd",
"degradationMap": "Model Degradatie Kaart",
"premiumModel": "Premium model",
"cheapModel": "Goedkoop model",
"detectionPatterns": "Detectiepatronen",
"newPattern": "bijv. \"genereer een titel\"",
"aliasPatternPlaceholder": "claude-sonnet-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Patroon",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Tokens die worden gebruikt om cache-items te maken (terugval op invoersnelheid)",
"customPricingNote": "U kunt de standaardprijzen voor specifieke modellen overschrijven. Aangepaste overschrijvingen hebben voorrang op automatisch gedetecteerde prijzen.",
"editPricing": "Prijzen bewerken",
"viewFullDetails": "Bekijk volledige details",
"modelAliasesTitle": "Model Aliases",
"addCustomAlias": "Aangepast Alias Toevoegen",
"deprecatedModelId": "Verouderd model-ID",
"newModelId": "Nieuw model-ID",
"customAliases": "Aangepaste Aliases",
"builtInAliases": "Ingebouwde Aliases",
"backgroundDegradationTitle": "Achtergrondtaak Degradatie",
"backgroundDegradationDesc": "Detecteert automatisch achtergrondtaken (titels, samenvattingen) en routeert naar goedkopere modellen",
"enableDegradation": "Achtergrond Degradatie Inschakelen",
"enableDegradationHint": "Wanneer ingeschakeld, worden achtergrondtaken zoals titelgeneratie en samenvattingen automatisch naar goedkopere modellen gerouteerd",
"tasksDetected": "Taken gedetecteerd",
"degradationMap": "Model Degradatie Kaart",
"premiumModel": "Premium model",
"cheapModel": "Goedkoop model",
"detectionPatterns": "Detectiepatronen",
"newPattern": "bijv. \"genereer een titel\""
"viewFullDetails": "Bekijk volledige details"
},
"translator": {
"title": "Vertaler",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Aanbieders",
"commonUseCases": "Veelvoorkomende gebruiksscenario's",
"clientCompatibility": "Compatibiliteit met klanten",
"protocolsToc": "Protocols",
"apiReference": "API-referentie",
"method": "Methode",
"path": "Pad",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Gebruik",
"clientClaudeBullet1Middle": "(Claude) of",
"clientClaudeBullet1Suffix": "(Antizwaartekracht) voorvoegsel.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "OpenAI-compatibel chat-eindpunt (standaard).",
"endpointResponsesNote": "Reacties API-eindpunt (Codex, o-serie).",
"endpointModelsNote": "Modelcatalogus voor alle aangesloten providers.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute wordt geleverd \"zoals het is\" zonder enige vorm van garantie. Wij zijn niet verantwoordelijk voor eventuele kosten die voortvloeien uit API-gebruik, serviceonderbrekingen of gegevensverlies. Zorg altijd voor back-ups van uw configuratie.",
"termsSection6Title": "6. Open-source",
"termsSection6Text": "OmniRoute is open source-software. U bent vrij om het te inspecteren, wijzigen en distribueren onder de voorwaarden van de licentie."
},
"media": {
"title": "Media-werkplaats",
"subtitle": "Genereer afbeeldingen, videos en muziek",
"model": "Model",
"prompt": "Prompt",
"generate": "Genereren",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Helse",
"limits": "Grenser og kvoter",
"cliTools": "CLI-verktøy",
"media": "Medier",
"settings": "Innstillinger",
"translator": "Oversetter",
"docs": "Dokumenter",
"issues": "Problemer",
"endpoint": "Endepunkt",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API-behandler",
"logs": "Logger",
"auditLog": "Revisjonslogg",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Proxy-serveren er stoppet eller starter på nytt.",
"expandSidebar": "Utvid sidefeltet",
"collapseSidebar": "Skjul sidefeltet",
"media": "Medier"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Logg ut",
@@ -108,10 +130,18 @@
"homeDescription": "Velkommen til OmniRoute",
"endpoint": "Endepunkt",
"endpointDescription": "API-endepunktkonfigurasjon",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Innstillinger",
"settingsDescription": "Administrer dine preferanser",
"openaiCompatible": "OpenAI-kompatibel",
"anthropicCompatible": "Antropisk kompatibel"
"anthropicCompatible": "Antropisk kompatibel",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Rask start",
@@ -261,6 +291,21 @@
"showing": "Viser {count} oppføringer (offset {offset})",
"previous": "Forrige"
},
"media": {
"title": "Medialab",
"subtitle": "Generer bilder, videoer og musikk",
"model": "Model",
"prompt": "Prompt",
"generate": "Generer",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI-verktøy",
"noActiveProviders": "Ingen aktive tilbydere",
@@ -533,7 +578,75 @@
"saving": "Lagrer...",
"weighted": "Vektet",
"leastUsed": "Minst brukt",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Kostnader",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Konverter tekst til tale med naturlig lyd",
"moderations": "Moderasjoner",
"moderationsDesc": "Innholdsmoderering og sikkerhetsklassifisering",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Kjerne-API-er",
"categoryMedia": "Media & Multi-Modal",
"categoryUtility": "Verktøy & Administrasjon",
"enableCloudTitle": "Aktiver Cloud Proxy",
"whatYouGet": "Hva du vil få",
"cloudBenefitAccess": "Få tilgang til API-en din fra hvor som helst i verden",
@@ -613,13 +733,154 @@
"image": "Bilde",
"custom": "tilpasset",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Kjerne-API-er",
"categoryMedia": "Media & Multi-Modal",
"categoryUtility": "Verktøy & Administrasjon"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Påkall verktøy som `omniroute_get_health` og `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A hurtigstart",
"a2aQuickStartStep1": "Oppdag agentkortet på `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC-forespørsler til `POST /a2a` ved å bruke `message/send` eller `message/stream`.",
"a2aQuickStartStep3": "Spor og kontroller oppgaver ved å bruke `tasks/get` og `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Laster inn MCP-dashbordet ...",
"activate": "aktivere",
"deactivate": "deaktivere",
"confirmSwitchCombo": "Bekreft {action} kombinasjonen \"{combo}\"?",
"switchComboFailed": "Kunne ikke bytte kombinasjonstilstand.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Systemhelse",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Velg en forhåndsinnstilt farge eller lag ditt eget tema med én farge",
"themeCreate": "Opprett tema",
"themeCustom": "Egendefinert tema",
"themeCoral": "Korall",
"themeBlue": "Blå",
"themeRed": "Rød",
"themeGreen": "Grønn",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Sticky Limit",
"stickyLimitDesc": "Anrop per konto før bytte",
"modelAliases": "Modellaliaser",
"modelAliasesTitle": "Modellaliaser",
"modelAliasesDesc": "Jokertegnmønstre for å tilordne modellnavn på nytt • Bruk * og ?",
"addCustomAlias": "Legg til Tilpasset Alias",
"deprecatedModelId": "Utdatert modell-ID",
"newModelId": "Ny modell-ID",
"customAliases": "Tilpassede Aliaser",
"builtInAliases": "Innebygde Aliaser",
"backgroundDegradationTitle": "Bakgrunnsoppgave Degradering",
"backgroundDegradationDesc": "Oppdager automatisk bakgrunnsoppgaver (titler, sammendrag) og ruter til billigere modeller",
"enableDegradation": "Aktiver Bakgrunnsdegradation",
"enableDegradationHint": "Når aktivert, rutes bakgrunnsoppgaver som tittelegenerering og sammendrag automatisk til billigere modeller",
"tasksDetected": "Oppgaver oppdaget",
"degradationMap": "Modelldegraderingsschema",
"premiumModel": "Premiummodell",
"cheapModel": "Billig modell",
"detectionPatterns": "Deteksjonsmønstre",
"newPattern": "f.eks. \"generer en tittel\"",
"aliasPatternPlaceholder": "claude-sonnett-*",
"aliasTargetPlaceholder": "claude-sonnett-4-20250514",
"pattern": "Mønster",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Tokens som brukes til å lage cache-oppføringer (tilbake til inngangshastighet)",
"customPricingNote": "Du kan overstyre standardpriser for spesifikke modeller. Egendefinerte overstyringer prioriteres fremfor automatisk oppdagede priser.",
"editPricing": "Rediger priser",
"viewFullDetails": "Se alle detaljer",
"modelAliasesTitle": "Modellaliaser",
"addCustomAlias": "Legg til Tilpasset Alias",
"deprecatedModelId": "Utdatert modell-ID",
"newModelId": "Ny modell-ID",
"customAliases": "Tilpassede Aliaser",
"builtInAliases": "Innebygde Aliaser",
"backgroundDegradationTitle": "Bakgrunnsoppgave Degradering",
"backgroundDegradationDesc": "Oppdager automatisk bakgrunnsoppgaver (titler, sammendrag) og ruter til billigere modeller",
"enableDegradation": "Aktiver Bakgrunnsdegradation",
"enableDegradationHint": "Når aktivert, rutes bakgrunnsoppgaver som tittelegenerering og sammendrag automatisk til billigere modeller",
"tasksDetected": "Oppgaver oppdaget",
"degradationMap": "Modelldegraderingsschema",
"premiumModel": "Premiummodell",
"cheapModel": "Billig modell",
"detectionPatterns": "Deteksjonsmønstre",
"newPattern": "f.eks. \"generer en tittel\""
"viewFullDetails": "Se alle detaljer"
},
"translator": {
"title": "Oversetter",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Leverandører",
"commonUseCases": "Vanlige brukstilfeller",
"clientCompatibility": "Klientkompatibilitet",
"protocolsToc": "Protocols",
"apiReference": "API-referanse",
"method": "Metode",
"path": "Sti",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Bruk",
"clientClaudeBullet1Middle": "(Claude) eller",
"clientClaudeBullet1Suffix": "(Antigravity) prefiks.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "OpenAI-kompatibelt chat-endepunkt (standard).",
"endpointResponsesNote": "Responses API-endepunkt (Codex, o-serien).",
"endpointModelsNote": "Modellkatalog for alle tilkoblede leverandører.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute leveres \"som den er\" uten garanti av noe slag. Vi er ikke ansvarlige for kostnader som påløper gjennom API-bruk, tjenesteavbrudd eller tap av data. Oppretthold alltid sikkerhetskopier av konfigurasjonen din.",
"termsSection6Title": "6. Åpen kildekode",
"termsSection6Text": "OmniRoute er åpen kildekode-programvare. Du står fritt til å inspisere, modifisere og distribuere den under lisensvilkårene."
},
"media": {
"title": "Medialab",
"subtitle": "Generer bilder, videoer og musikk",
"model": "Model",
"prompt": "Prompt",
"generate": "Generer",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Kalusugan",
"limits": "Mga Limitasyon at Quota",
"cliTools": "CLI Tools",
"media": "Media",
"settings": "Mga setting",
"translator": "Tagasalin",
"docs": "Docs",
"issues": "Mga isyu",
"endpoint": "Endpoint",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Tagapamahala ng API",
"logs": "Mga log",
"auditLog": "Log ng Audit",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Ang proxy server ay itinigil o nagre-restart.",
"expandSidebar": "Palawakin ang sidebar",
"collapseSidebar": "I-collapse ang sidebar",
"media": "Media"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Mag-logout",
@@ -108,10 +130,18 @@
"homeDescription": "Maligayang pagdating sa OmniRoute",
"endpoint": "Endpoint",
"endpointDescription": "Configuration ng endpoint ng API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Mga setting",
"settingsDescription": "Pamahalaan ang iyong mga kagustuhan",
"openaiCompatible": "OpenAI Compatible",
"anthropicCompatible": "Anthropic Compatible"
"anthropicCompatible": "Anthropic Compatible",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Mabilis na Pagsisimula",
@@ -261,6 +291,21 @@
"showing": "Ipinapakita ang {count} entry (offset {offset})",
"previous": "Nakaraang"
},
"media": {
"title": "Media Playground",
"subtitle": "Bumuo ng mga larawan, video, at musika",
"model": "Model",
"prompt": "Prompt",
"generate": "Bumuo",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI Tools",
"noActiveProviders": "Walang aktibong provider",
@@ -533,7 +578,75 @@
"saving": "Nagse-save...",
"weighted": "Natimbang",
"leastUsed": "Hindi gaanong nagamit",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "Paano gamitin ang diskarteng ito",
"strategyGuideWhen": "Kailan gagamitin",
"strategyGuideAvoid": "Iwasan kung kailan",
"strategyGuideExample": "Halimbawa",
"strategyGuide": {
"priority": {
"when": "Mayroon kang isang ginustong modelo at gusto lang ng fallback sa pagkabigo.",
"avoid": "Kailangan mo ng kahilingan sa pamamahagi sa mga modelo.",
"example": "Pangunahing modelo ng coding na may mas murang backup para sa mga outage."
},
"weighted": {
"when": "Kailangan mo ng kontroladong paghahati ng trapiko sa mga modelo.",
"avoid": "Hindi mo mapanatili ang tumpak na mga timbang sa paglipas ng panahon.",
"example": "80% stable na modelo + 20% canary model rollout."
},
"round-robin": {
"when": "Gusto mo ng predictable at pantay na pamamahagi.",
"avoid": "Masyadong malaki ang pagkakaiba ng mga modelo sa latency o gastos.",
"example": "Parehong modelo sa maraming account upang maikalat ang throughput."
},
"random": {
"when": "Gusto mo ng simpleng pamamahagi na may kaunting setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Mga gastos",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "I-convert ang teksto sa natural na tunog na pananalita",
"moderations": "Mga moderation",
"moderationsDesc": "Pag-moderate ng nilalaman at pag-uuri ng kaligtasan",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Mga Core na API",
"categoryMedia": "Media at Multi-Modal",
"categoryUtility": "Mga Utility at Pamamahala",
"enableCloudTitle": "Paganahin ang Cloud Proxy",
"whatYouGet": "Kung ano ang makukuha mo",
"cloudBenefitAccess": "I-access ang iyong API mula saanman sa mundo",
@@ -613,13 +733,154 @@
"image": "Imahe",
"custom": "kaugalian",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Mga Core na API",
"categoryMedia": "Media at Multi-Modal",
"categoryUtility": "Mga Utility at Pamamahala"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Resulta",
"tableApiKey": "API key",
"failed": "nabigo",
"previous": "Nakaraang",
"next": "Susunod"
},
"a2aDashboard": {
"loading": "Nilo-load ang A2A dashboard...",
"confirmCancelTask": "Kanselahin ang gawain {taskId}?",
"cancelTaskFailed": "Nabigong kanselahin ang gawain.",
"cancelTaskSuccess": "Kinansela ang gawain {taskId}.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "nabigo",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Nakaraang",
"next": "Susunod",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Kalusugan ng System",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Pumili ng preset na kulay o gumawa ng sarili mong tema gamit ang isang kulay",
"themeCreate": "Gumawa ng tema",
"themeCustom": "Custom na tema",
"themeCoral": "Koral",
"themeBlue": "Asul",
"themeRed": "Pula",
"themeGreen": "Berde",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Malagkit na Limitasyon",
"stickyLimitDesc": "Mga tawag sa bawat account bago lumipat",
"modelAliases": "Mga Alyas ng Modelo",
"modelAliasesTitle": "Mga Alias ng Model",
"modelAliasesDesc": "Mga pattern ng wildcard para i-remap ang mga pangalan ng modelo • Gamitin ang * at ?",
"addCustomAlias": "Magdagdag ng Custom na Alias",
"deprecatedModelId": "Deprecated na Model ID",
"newModelId": "Bagong Model ID",
"customAliases": "Mga Custom na Alias",
"builtInAliases": "Mga Built-in na Alias",
"backgroundDegradationTitle": "Background Task Degradation",
"backgroundDegradationDesc": "Auto-detect ang mga background task (titulo, buod) at i-route sa mas murang modelo",
"enableDegradation": "I-enable ang Background Degradation",
"enableDegradationHint": "Kapag naka-enable, ang mga background task tulad ng paggawa ng titulo at buod ay awtomatikong nire-route sa mas murang modelo",
"tasksDetected": "Mga nadetect na task",
"degradationMap": "Mapa ng Model Degradation",
"premiumModel": "Premium na modelo",
"cheapModel": "Murang modelo",
"detectionPatterns": "Mga Pattern ng Detection",
"newPattern": "hal. \"gumawa ng titulo\"",
"aliasPatternPlaceholder": "claude-sonnet-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Pattern",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Mga token na ginamit upang lumikha ng mga entry sa cache (fallback sa rate ng pag-input)",
"customPricingNote": "Maaari mong i-override ang default na pagpepresyo para sa mga partikular na modelo. Mas inuuna ang mga custom na override kaysa sa awtomatikong natukoy na pagpepresyo.",
"editPricing": "I-edit ang Pagpepresyo",
"viewFullDetails": "Tingnan ang Buong Detalye",
"modelAliasesTitle": "Mga Alias ng Model",
"addCustomAlias": "Magdagdag ng Custom na Alias",
"deprecatedModelId": "Deprecated na Model ID",
"newModelId": "Bagong Model ID",
"customAliases": "Mga Custom na Alias",
"builtInAliases": "Mga Built-in na Alias",
"backgroundDegradationTitle": "Background Task Degradation",
"backgroundDegradationDesc": "Auto-detect ang mga background task (titulo, buod) at i-route sa mas murang modelo",
"enableDegradation": "I-enable ang Background Degradation",
"enableDegradationHint": "Kapag naka-enable, ang mga background task tulad ng paggawa ng titulo at buod ay awtomatikong nire-route sa mas murang modelo",
"tasksDetected": "Mga nadetect na task",
"degradationMap": "Mapa ng Model Degradation",
"premiumModel": "Premium na modelo",
"cheapModel": "Murang modelo",
"detectionPatterns": "Mga Pattern ng Detection",
"newPattern": "hal. \"gumawa ng titulo\""
"viewFullDetails": "Tingnan ang Buong Detalye"
},
"translator": {
"title": "Tagasalin",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Mga provider",
"commonUseCases": "Mga Karaniwang Paggamit",
"clientCompatibility": "Pagkakatugma ng Kliyente",
"protocolsToc": "Protocols",
"apiReference": "Sanggunian ng API",
"method": "Pamamaraan",
"path": "Daan",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Gamitin",
"clientClaudeBullet1Middle": "(Claude) o",
"clientClaudeBullet1Suffix": "(Antigravity) prefix.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "OpenAI-compatible chat endpoint (default).",
"endpointResponsesNote": "Endpoint ng Responses API (Codex, o-series).",
"endpointModelsNote": "Catalog ng modelo para sa lahat ng konektadong provider.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "Ang OmniRoute ay ibinigay \"as is\" nang walang anumang uri ng warranty. Hindi kami mananagot para sa anumang mga gastos na natamo sa pamamagitan ng paggamit ng API, pagkaantala ng serbisyo, o pagkawala ng data. Palaging panatilihin ang mga backup ng iyong configuration.",
"termsSection6Title": "6. Open Source",
"termsSection6Text": "Ang OmniRoute ay open-source na software. Malaya kang suriin, baguhin, at ipamahagi ito sa ilalim ng mga tuntunin ng lisensya nito."
},
"media": {
"title": "Media Playground",
"subtitle": "Bumuo ng mga larawan, video, at musika",
"model": "Model",
"prompt": "Prompt",
"generate": "Bumuo",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Zdrowie",
"limits": "Limity i kwoty",
"cliTools": "Narzędzia interfejsu wiersza polecenia",
"media": "Media",
"settings": "Ustawienia",
"translator": "Tłumacz",
"docs": "Dokumenty",
"issues": "Problemy",
"endpoint": "Punkt końcowy",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Menedżer API",
"logs": "Dzienniki",
"auditLog": "Dziennik audytu",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Serwer proxy został zatrzymany lub uruchamia się ponownie.",
"expandSidebar": "Rozwiń pasek boczny",
"collapseSidebar": "Zwiń pasek boczny",
"media": "Media"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Wyloguj się",
@@ -108,10 +130,18 @@
"homeDescription": "Witamy w OmniRoute",
"endpoint": "Punkt końcowy",
"endpointDescription": "Konfiguracja punktu końcowego interfejsu API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Ustawienia",
"settingsDescription": "Zarządzaj swoimi preferencjami",
"openaiCompatible": "Kompatybilny z OpenAI",
"anthropicCompatible": "Kompatybilny z antropią"
"anthropicCompatible": "Kompatybilny z antropią",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Szybki start",
@@ -261,6 +291,21 @@
"showing": "Wyświetlanie wpisów {count} (przesunięcie {offset})",
"previous": "Poprzedni"
},
"media": {
"title": "Studio multimediów",
"subtitle": "Generuj obrazy, wideo i muzykę",
"model": "Model",
"prompt": "Prompt",
"generate": "Generuj",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Narzędzia interfejsu wiersza polecenia",
"noActiveProviders": "Brak aktywnych dostawców",
@@ -533,7 +578,75 @@
"saving": "Zapisywanie...",
"weighted": "Ważona",
"leastUsed": "Najrzadziej używany",
"costOpt": "Opcja kosztowa"
"costOpt": "Opcja kosztowa",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Koszty",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Konwertuj tekst na naturalnie brzmiącą mowę",
"moderations": "Moderacje",
"moderationsDesc": "Moderowanie treści i klasyfikacja bezpieczeństwa",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Główne API",
"categoryMedia": "Media i Multi-Modal",
"categoryUtility": "Narzędzia i Zarządzanie",
"enableCloudTitle": "Włącz serwer proxy w chmurze",
"whatYouGet": "Co otrzymasz",
"cloudBenefitAccess": "Uzyskaj dostęp do swojego API z dowolnego miejsca na świecie",
@@ -613,13 +733,154 @@
"image": "Obraz",
"custom": "niestandardowe",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Główne API",
"categoryMedia": "Media i Multi-Modal",
"categoryUtility": "Narzędzia i Zarządzanie"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Potwierdzić kombinację {action} „{combo}”?",
"switchComboFailed": "Nie udało się przełączyć stanu kombinacji.",
"switchComboSuccess": "Kombinacja „{combo}” została zaktualizowana.",
"confirmApplyProfile": "Zastosować profil odporności „{profile}”?",
"applyProfileFailed": "Nie udało się zastosować profilu odporności.",
"applyProfileSuccess": "Zastosowano profil „{profile}”.",
"confirmResetBreakers": "Zresetować wszystkie wyłączniki automatyczne?",
"resetBreakersFailed": "Nie udało się zresetować wyłączników automatycznych.",
"resetBreakersSuccess": "Reset wyłączników automatycznych.",
"processStatus": "Stan procesu",
"online": "W Internecie",
"offline": "Nieaktywny",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Stan systemu",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Wybierz gotowy kolor lub utwórz własny motyw z jednego koloru",
"themeCreate": "Utwórz motyw",
"themeCustom": "Motyw niestandardowy",
"themeCoral": "Koralowy",
"themeBlue": "Niebieski",
"themeRed": "Czerwony",
"themeGreen": "Zielony",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Lepki limit",
"stickyLimitDesc": "Połączenia na konto przed zmianą",
"modelAliases": "Aliasy modeli",
"modelAliasesTitle": "Aliasy modeli",
"modelAliasesDesc": "Wzorce wieloznaczne do zmiany nazw modeli • Użyj * i ?",
"addCustomAlias": "Dodaj niestandardowy alias",
"deprecatedModelId": "Przestarzały ID modelu",
"newModelId": "Nowy ID modelu",
"customAliases": "Niestandardowe aliasy",
"builtInAliases": "Wbudowane aliasy",
"backgroundDegradationTitle": "Degradacja zadań w tle",
"backgroundDegradationDesc": "Automatycznie wykrywa zadania w tle (tytuły, streszczenia) i kieruje do tańszych modeli",
"enableDegradation": "Włącz degradację zadań w tle",
"enableDegradationHint": "Gdy włączone, zadania w tle, takie jak generowanie tytułów i podsumowań, są automatycznie kierowane do tańszych modeli",
"tasksDetected": "Wykryte zadania",
"degradationMap": "Mapa degradacji modeli",
"premiumModel": "Model premium",
"cheapModel": "Tani model",
"detectionPatterns": "Wzorce wykrywania",
"newPattern": "np. \"wygeneruj tytuł\"",
"aliasPatternPlaceholder": "claude-sonnet-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Wzór",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Tokeny używane do tworzenia wpisów w pamięci podręcznej (powrót do szybkości wprowadzania)",
"customPricingNote": "Możesz zastąpić domyślne ceny dla określonych modeli. Zastąpienia niestandardowe mają pierwszeństwo przed automatycznie wykrytymi cenami.",
"editPricing": "Edytuj ceny",
"viewFullDetails": "Zobacz pełne szczegóły",
"modelAliasesTitle": "Aliasy modeli",
"addCustomAlias": "Dodaj niestandardowy alias",
"deprecatedModelId": "Przestarzały ID modelu",
"newModelId": "Nowy ID modelu",
"customAliases": "Niestandardowe aliasy",
"builtInAliases": "Wbudowane aliasy",
"backgroundDegradationTitle": "Degradacja zadań w tle",
"backgroundDegradationDesc": "Automatycznie wykrywa zadania w tle (tytuły, streszczenia) i kieruje do tańszych modeli",
"enableDegradation": "Włącz degradację zadań w tle",
"enableDegradationHint": "Gdy włączone, zadania w tle, takie jak generowanie tytułów i podsumowań, są automatycznie kierowane do tańszych modeli",
"tasksDetected": "Wykryte zadania",
"degradationMap": "Mapa degradacji modeli",
"premiumModel": "Model premium",
"cheapModel": "Tani model",
"detectionPatterns": "Wzorce wykrywania",
"newPattern": "np. \"wygeneruj tytuł\""
"viewFullDetails": "Zobacz pełne szczegóły"
},
"translator": {
"title": "Tłumacz",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Dostawcy",
"commonUseCases": "Typowe przypadki użycia",
"clientCompatibility": "Zgodność klienta",
"protocolsToc": "Protocols",
"apiReference": "Dokumentacja API",
"method": "Metoda",
"path": "Ścieżka",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Użyj",
"clientClaudeBullet1Middle": "(Claude) lub",
"clientClaudeBullet1Suffix": "Przedrostek (Antygrawitacja).",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Punkt końcowy czatu zgodny z OpenAI (domyślnie).",
"endpointResponsesNote": "Punkt końcowy interfejsu API odpowiedzi (Kodeks, seria o).",
"endpointModelsNote": "Katalog modeli dla wszystkich podłączonych dostawców.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "Usługa OmniRoute jest dostarczana w stanie takim, w jakim jest, bez jakiejkolwiek gwarancji. Nie ponosimy odpowiedzialności za jakiekolwiek koszty powstałe w wyniku korzystania z API, zakłóceń w świadczeniu usług lub utraty danych. Zawsze twórz kopie zapasowe swojej konfiguracji.",
"termsSection6Title": "6. Otwarte źródło",
"termsSection6Text": "OmniRoute jest oprogramowaniem typu open source. Możesz go przeglądać, modyfikować i rozpowszechniać zgodnie z warunkami licencji."
},
"media": {
"title": "Studio multimediów",
"subtitle": "Generuj obrazy, wideo i muzykę",
"model": "Model",
"prompt": "Prompt",
"generate": "Generuj",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -91,7 +91,27 @@
"serverDisconnected": "Servidor Desconectado",
"serverDisconnectedMsg": "O servidor proxy foi parado ou está reiniciando.",
"expandSidebar": "Expandir barra lateral",
"collapseSidebar": "Recolher barra lateral"
"collapseSidebar": "Recolher barra lateral",
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Sair",
@@ -119,7 +139,9 @@
"openaiCompatible": "Compatível com OpenAI",
"anthropicCompatible": "Compatível com Anthropic",
"media": "Mídia",
"mediaDescription": "Gerar imagens, vídeos e músicas"
"mediaDescription": "Gerar imagens, vídeos e músicas",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Início Rápido",
@@ -556,7 +578,75 @@
"saving": "Salvando...",
"weighted": "Ponderado",
"leastUsed": "Menos Usado",
"costOpt": "Custo-Otim"
"costOpt": "Custo-Otim",
"strategyGuideTitle": "Como usar esta estratégia",
"strategyGuideWhen": "Quando usar",
"strategyGuideAvoid": "Evite quando",
"strategyGuideExample": "Exemplo",
"strategyGuide": {
"priority": {
"when": "Você tem um modelo principal e quer fallback apenas em falha.",
"avoid": "Você precisa distribuir requisições entre modelos.",
"example": "Modelo principal para código e backup mais barato para indisponibilidade."
},
"weighted": {
"when": "Você precisa dividir tráfego com percentuais controlados.",
"avoid": "Você não consegue manter os pesos atualizados.",
"example": "80% modelo estável + 20% modelo canário."
},
"round-robin": {
"when": "Você quer distribuição previsível e equilibrada.",
"avoid": "Os modelos têm custo ou latência muito diferentes.",
"example": "Mesmo modelo em múltiplas contas para espalhar throughput."
},
"random": {
"when": "Você quer distribuição simples com baixa configuração.",
"avoid": "Você precisa de garantias rígidas de distribuição.",
"example": "Protótipos rápidos com modelos equivalentes."
},
"least-used": {
"when": "Você quer balanceamento adaptativo baseado no uso recente.",
"avoid": "Seu volume é baixo e não se beneficia dessa adaptação.",
"example": "Workloads mistos onde um modelo tende a ficar sobrecarregado."
},
"cost-optimized": {
"when": "Redução de custo é a prioridade principal.",
"avoid": "A base de preços está ausente ou desatualizada.",
"example": "Jobs em lote ou segundo plano focados em menor custo."
}
},
"advancedHelp": {
"maxRetries": "Quantas tentativas serão feitas antes de falhar a requisição.",
"retryDelay": "Espera inicial entre tentativas. Valores maiores reduzem picos.",
"timeout": "Tempo máximo da requisição antes de cancelar.",
"healthcheck": "Ignora modelos/provedores não saudáveis no roteamento.",
"concurrencyPerModel": "Máximo de requisições simultâneas por modelo no round-robin.",
"queueTimeout": "Tempo máximo em fila antes de expirar no round-robin."
},
"templatesTitle": "Templates rápidos",
"templatesDescription": "Aplique um perfil inicial e depois ajuste modelos e configuração.",
"templateApply": "Aplicar template",
"templateHighAvailability": "Alta disponibilidade",
"templateHighAvailabilityDesc": "Roteamento por prioridade com healthcheck e retries seguros.",
"templateCostSaver": "Economia de custo",
"templateCostSaverDesc": "Roteamento custo-otimizado para workloads com foco em orçamento.",
"templateBalanced": "Carga balanceada",
"templateBalancedDesc": "Roteamento por menos uso para distribuir demanda ao longo do tempo.",
"usageGuideHide": "Ocultar",
"usageGuideDontShowAgain": "Não mostrar novamente",
"usageGuideShow": "Mostrar guia",
"quickTestTitle": "Combo pronto para validar",
"quickTestDescription": "Rode um teste agora para confirmar fallback e latência.",
"testNow": "Testar agora",
"pricingCoverage": "Cobertura de preços",
"pricingCoverageHint": "Custo-otimizado funciona melhor quando todos os modelos têm preço configurado.",
"pricingAvailable": "Preço disponível",
"pricingMissing": "Sem preço",
"pricingAvailableShort": "com-preço",
"pricingMissingShort": "sem-preço",
"warningRoundRobinSingleModel": "Round-robin é mais útil com pelo menos 2 modelos.",
"warningCostOptimizedPartialPricing": "Apenas {priced} de {total} modelos têm preço. O roteamento pode ficar parcialmente orientado a custo.",
"warningCostOptimizedNoPricing": "Não há dados de preço para este combo. Custo-otimizado pode rotear de forma inesperada."
},
"costs": {
"title": "Custos",
@@ -597,6 +687,13 @@
"textToSpeechDesc": "Converter texto em fala natural",
"moderations": "Moderações",
"moderationsDesc": "Moderação de conteúdo e classificação de segurança",
"responsesDesc": "API Responses do OpenAI para Codex e fluxos de trabalho agênticos avançados",
"listModelsDesc": "Listar todos os modelos disponíveis em todos os provedores conectados",
"settingsApiDesc": "Ler e modificar a configuração do OmniRoute via API",
"settingsApi": "Settings API",
"categoryCore": "APIs Principais",
"categoryMedia": "Mídia e Multi-Modal",
"categoryUtility": "Utilidades e Gerenciamento",
"enableCloudTitle": "Ativar Proxy na Nuvem",
"whatYouGet": "O que você terá",
"cloudBenefitAccess": "Acesse sua API de qualquer lugar do mundo",
@@ -636,13 +733,6 @@
"image": "Imagem",
"custom": "custom",
"modelsCount": "{count, plural, one {# modelo} other {# modelos}}",
"responsesDesc": "API Responses do OpenAI para Codex e fluxos de trabalho agênticos avançados",
"listModelsDesc": "Listar todos os modelos disponíveis em todos os provedores conectados",
"settingsApi": "Settings API",
"settingsApiDesc": "Ler e modificar a configuração do OmniRoute via API",
"categoryCore": "APIs Principais",
"categoryMedia": "Mídia e Multi-Modal",
"categoryUtility": "Utilidades e Gerenciamento",
"sectionTitle": "Superfície de Integração",
"sectionDescription": "APIs compatíveis com OpenAI e endpoints operacionais de protocolos",
"tabApis": "APIs compatíveis com OpenAI",
@@ -1271,7 +1361,6 @@
"themeAccentDesc": "Escolha uma cor predefinida ou crie seu próprio tema com uma cor",
"themeCreate": "Criar tema",
"themeCustom": "Tema personalizado",
"themeCoral": "Coral",
"themeBlue": "Azul",
"themeRed": "Vermelho",
"themeGreen": "Verde",
@@ -1352,7 +1441,23 @@
"stickyLimit": "Limite Fixo",
"stickyLimitDesc": "Chamadas por conta antes de trocar",
"modelAliases": "Aliases de Modelo",
"modelAliasesTitle": "Aliases de Modelo",
"modelAliasesDesc": "Padrões coringa para remapear nomes de modelos • Use * e ?",
"addCustomAlias": "Adicionar Alias Personalizado",
"deprecatedModelId": "ID do modelo depreciado",
"newModelId": "Novo ID do modelo",
"customAliases": "Aliases Personalizados",
"builtInAliases": "Aliases Integrados",
"backgroundDegradationTitle": "Degradação de Tarefas em Background",
"backgroundDegradationDesc": "Detecta automaticamente tarefas em background (títulos, resumos) e roteia para modelos mais baratos",
"enableDegradation": "Ativar Degradação em Background",
"enableDegradationHint": "Quando ativado, tarefas em background como geração de títulos e resumos são roteadas automaticamente para modelos mais baratos",
"tasksDetected": "Tarefas detectadas",
"degradationMap": "Mapa de Degradação de Modelos",
"premiumModel": "Modelo premium",
"cheapModel": "Modelo barato",
"detectionPatterns": "Padrões de Detecção",
"newPattern": "ex: \"gerar um título\"",
"aliasPatternPlaceholder": "claude-sonnet-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Padrão",
@@ -1570,23 +1675,7 @@
"cacheCreationTokenDesc": "Tokens usados para criar entradas de cache (fallback para taxa de input)",
"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",
"modelAliasesTitle": "Aliases de Modelo",
"addCustomAlias": "Adicionar Alias Personalizado",
"deprecatedModelId": "ID do modelo depreciado",
"newModelId": "Novo ID do modelo",
"customAliases": "Aliases Personalizados",
"builtInAliases": "Aliases Integrados",
"backgroundDegradationTitle": "Degradação de Tarefas em Background",
"backgroundDegradationDesc": "Detecta automaticamente tarefas em background (títulos, resumos) e roteia para modelos mais baratos",
"enableDegradation": "Ativar Degradação em Background",
"enableDegradationHint": "Quando ativado, tarefas em background como geração de títulos e resumos são roteadas automaticamente para modelos mais baratos",
"tasksDetected": "Tarefas detectadas",
"degradationMap": "Mapa de Degradação de Modelos",
"premiumModel": "Modelo premium",
"cheapModel": "Modelo barato",
"detectionPatterns": "Padrões de Detecção",
"newPattern": "ex: \"gerar um título\""
"viewFullDetails": "Ver Detalhes Completos"
},
"translator": {
"title": "Tradutor",

View File

@@ -69,11 +69,14 @@
"health": "Saúde",
"limits": "Limites e cotas",
"cliTools": "Ferramentas CLI",
"media": "Mídia",
"settings": "Configurações",
"translator": "Tradutor",
"docs": "Documentos",
"issues": "Problemas",
"endpoint": "Ponto final",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Gerenciador de APIs",
"logs": "Registros",
"auditLog": "Registro de auditoria",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "O servidor proxy foi interrompido ou está reiniciando.",
"expandSidebar": "Expandir barra lateral",
"collapseSidebar": "Recolher barra lateral",
"media": "Mídia"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Vermelho",
"themeGreen": "Verde",
"themeViolet": "Violeta",
"themeOrange": "Laranja",
"themeCyan": "Ciano"
},
"themesPage": {
"title": "Themes",
"description": "Escolha um tema predefinido ou crie o seu próprio com uma única cor",
"presetColors": "Popular colors",
"customTheme": "Tema personalizado",
"customThemeDesc": "Clique em criar tema e escolha uma cor",
"createTheme": "Create theme",
"activePreset": "Tema ativo"
},
"header": {
"logout": "Sair",
@@ -108,10 +130,18 @@
"homeDescription": "Bem-vindo ao OmniRoute",
"endpoint": "Ponto final",
"endpointDescription": "Configuração de endpoint de API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Configurações",
"settingsDescription": "Gerencie suas preferências",
"openaiCompatible": "Compatível com OpenAI",
"anthropicCompatible": "Compatível Antrópico"
"anthropicCompatible": "Compatível Antrópico",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Início rápido",
@@ -261,6 +291,21 @@
"showing": "Mostrando entradas {count} (deslocamento {offset})",
"previous": "Anterior"
},
"media": {
"title": "Playground de Mídia",
"subtitle": "Gere imagens, vídeos e música",
"model": "Model",
"prompt": "Prompt",
"generate": "Gerar",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Ferramentas CLI",
"noActiveProviders": "Nenhum provedor ativo",
@@ -533,7 +578,75 @@
"saving": "Salvando...",
"weighted": "Ponderado",
"leastUsed": "Menos usado",
"costOpt": "Opção de custo"
"costOpt": "Opção de custo",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Custos",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Converta texto em fala com som natural",
"moderations": "Moderações",
"moderationsDesc": "Moderação de conteúdo e classificação de segurança",
"responsesDesc": "API Responses do OpenAI para Codex e fluxos de trabalho agênticos avançados",
"listModelsDesc": "Listar todos os modelos disponíveis em todos os fornecedores conectados",
"settingsApiDesc": "Ler e modificar a configuração do OmniRoute via API",
"settingsApi": "Settings API",
"categoryCore": "APIs Principais",
"categoryMedia": "Mídia e Multi-Modal",
"categoryUtility": "Utilidades e Gestão",
"enableCloudTitle": "Ativar proxy de nuvem",
"whatYouGet": "O que você receberá",
"cloudBenefitAccess": "Acesse sua API de qualquer lugar do mundo",
@@ -613,13 +733,154 @@
"image": "Imagem",
"custom": "personalizado",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "API Responses do OpenAI para Codex e fluxos de trabalho agênticos avançados",
"listModelsDesc": "Listar todos os modelos disponíveis em todos os fornecedores conectados",
"settingsApi": "Settings API",
"settingsApiDesc": "Ler e modificar a configuração do OmniRoute via API",
"categoryCore": "APIs Principais",
"categoryMedia": "Mídia e Multi-Modal",
"categoryUtility": "Utilidades e Gestão"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capacidades",
"agentCardNotAvailable": "Cartão de agente não disponível.",
"quickValidation": "Validação rápida",
"quickValidationDescription": "Executa chamadas smoke através do endpoint `/a2a` ativo.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Gerenciamento de tarefas",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Saúde do sistema",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Escolha uma cor predefinida ou crie seu próprio tema com uma cor",
"themeCreate": "Criar tema",
"themeCustom": "Tema personalizado",
"themeCoral": "Coral",
"themeBlue": "Azul",
"themeRed": "Vermelho",
"themeGreen": "Verde",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Limite pegajoso",
"stickyLimitDesc": "Chamadas por conta antes de mudar",
"modelAliases": "Aliases de modelo",
"modelAliasesTitle": "Aliases de Modelo",
"modelAliasesDesc": "Padrões curinga para remapear nomes de modelos • Use * e ?",
"addCustomAlias": "Adicionar Alias Personalizado",
"deprecatedModelId": "ID do modelo depreciado",
"newModelId": "Novo ID do modelo",
"customAliases": "Aliases Personalizados",
"builtInAliases": "Aliases Integrados",
"backgroundDegradationTitle": "Degradação de Tarefas em Background",
"backgroundDegradationDesc": "Detecta automaticamente tarefas em background (títulos, resumos) e roteia para modelos mais baratos",
"enableDegradation": "Ativar Degradação em Background",
"enableDegradationHint": "Quando ativado, tarefas em background como geração de títulos e resumos são roteadas automaticamente para modelos mais baratos",
"tasksDetected": "Tarefas detectadas",
"degradationMap": "Mapa de Degradação de Modelos",
"premiumModel": "Modelo premium",
"cheapModel": "Modelo barato",
"detectionPatterns": "Padrões de Deteção",
"newPattern": "ex: \"gerar um título\"",
"aliasPatternPlaceholder": "claude-soneto-*",
"aliasTargetPlaceholder": "claude-soneto-4-20250514",
"pattern": "Padrão",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Tokens usados para criar entradas de cache (fallback para taxa de entrada)",
"customPricingNote": "Você pode substituir o preço padrão de modelos específicos. As substituições personalizadas têm prioridade sobre os preços detectados automaticamente.",
"editPricing": "Editar preços",
"viewFullDetails": "Ver detalhes completos",
"modelAliasesTitle": "Aliases de Modelo",
"addCustomAlias": "Adicionar Alias Personalizado",
"deprecatedModelId": "ID do modelo depreciado",
"newModelId": "Novo ID do modelo",
"customAliases": "Aliases Personalizados",
"builtInAliases": "Aliases Integrados",
"backgroundDegradationTitle": "Degradação de Tarefas em Background",
"backgroundDegradationDesc": "Detecta automaticamente tarefas em background (títulos, resumos) e roteia para modelos mais baratos",
"enableDegradation": "Ativar Degradação em Background",
"enableDegradationHint": "Quando ativado, tarefas em background como geração de títulos e resumos são roteadas automaticamente para modelos mais baratos",
"tasksDetected": "Tarefas detectadas",
"degradationMap": "Mapa de Degradação de Modelos",
"premiumModel": "Modelo premium",
"cheapModel": "Modelo barato",
"detectionPatterns": "Padrões de Deteção",
"newPattern": "ex: \"gerar um título\""
"viewFullDetails": "Ver detalhes completos"
},
"translator": {
"title": "Tradutor",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Provedores",
"commonUseCases": "Casos de uso comuns",
"clientCompatibility": "Compatibilidade do cliente",
"protocolsToc": "Protocols",
"apiReference": "Referência de API",
"method": "Método",
"path": "Caminho",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Usar",
"clientClaudeBullet1Middle": "(Cláudio) ou",
"clientClaudeBullet1Suffix": "Prefixo (antigravidade).",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Endpoint de chat compatível com OpenAI (padrão).",
"endpointResponsesNote": "Endpoint da API de respostas (Codex, série o).",
"endpointModelsNote": "Catálogo de modelos para todos os provedores conectados.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute é fornecido \"como está\" sem qualquer tipo de garantia. Não somos responsáveis por quaisquer custos incorridos através do uso da API, interrupções de serviço ou perda de dados. Sempre mantenha backups de sua configuração.",
"termsSection6Title": "6. Código aberto",
"termsSection6Text": "OmniRoute é um software de código aberto. Você é livre para inspecioná-lo, modificá-lo e distribuí-lo sob os termos de sua licença."
},
"media": {
"title": "Playground de Mídia",
"subtitle": "Gere imagens, vídeos e música",
"model": "Model",
"prompt": "Prompt",
"generate": "Gerar",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Sănătate",
"limits": "Limite și cote",
"cliTools": "Instrumente CLI",
"media": "Media",
"settings": "Setări",
"translator": "Traducător",
"docs": "Docs",
"issues": "Probleme",
"endpoint": "Punct final",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Manager API",
"logs": "Bușteni",
"auditLog": "Jurnal de audit",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Serverul proxy a fost oprit sau repornește.",
"expandSidebar": "Extinde bara laterală",
"collapseSidebar": "Restrângeți bara laterală",
"media": "Media"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Deconectare",
@@ -108,10 +130,18 @@
"homeDescription": "Bun venit la OmniRoute",
"endpoint": "Punct final",
"endpointDescription": "Configurarea punctului final API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Setări",
"settingsDescription": "Gestionați-vă preferințele",
"openaiCompatible": "Compatibil cu OpenAI",
"anthropicCompatible": "Compatibil antropic"
"anthropicCompatible": "Compatibil antropic",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Pornire rapidă",
@@ -261,6 +291,21 @@
"showing": "Se afișează {count} intrări (offset {offset})",
"previous": "Anterior"
},
"media": {
"title": "Studio media",
"subtitle": "Generează imagini, videoclipuri și muzică",
"model": "Model",
"prompt": "Prompt",
"generate": "Generează",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Instrumente CLI",
"noActiveProviders": "Nu există furnizori activi",
@@ -533,7 +578,75 @@
"saving": "Se salvează...",
"weighted": "ponderat",
"leastUsed": "Cel mai puțin folosit",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Costuri",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Transformați textul în vorbire cu sunet natural",
"moderations": "Moderații",
"moderationsDesc": "Moderarea conținutului și clasificarea siguranței",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "API-uri de Bază",
"categoryMedia": "Media și Multi-Modal",
"categoryUtility": "Utilități și Gestionare",
"enableCloudTitle": "Activați Cloud Proxy",
"whatYouGet": "Ce vei primi",
"cloudBenefitAccess": "Accesați-vă API-ul de oriunde în lume",
@@ -613,13 +733,154 @@
"image": "Imagine",
"custom": "personalizat",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "API-uri de Bază",
"categoryMedia": "Media și Multi-Modal",
"categoryUtility": "Utilități și Gestionare"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirmați {action} combo „{combo}”?",
"switchComboFailed": "Nu s-a putut comuta starea combo.",
"switchComboSuccess": "Combo „{combo}” a fost actualizat.",
"confirmApplyProfile": "Aplicați profilul de rezistență „{profile}”?",
"applyProfileFailed": "Nu s-a putut aplica profilul de rezistență.",
"applyProfileSuccess": "S-a aplicat profilul „{profile}”.",
"confirmResetBreakers": "Resetați toate întreruptoarele?",
"resetBreakersFailed": "Nu s-au resetat întreruptoarele.",
"resetBreakersSuccess": "Întrerupătoarele se resetează.",
"processStatus": "Starea procesului",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Sănătatea sistemului",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Alege o culoare presetată sau creează-ți propria temă cu o singură culoare",
"themeCreate": "Creează temă",
"themeCustom": "Temă personalizată",
"themeCoral": "Coral",
"themeBlue": "Albastru",
"themeRed": "Roșu",
"themeGreen": "Verde",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Limită lipicioasă",
"stickyLimitDesc": "Apeluri pe cont înainte de a comuta",
"modelAliases": "Aliasuri de model",
"modelAliasesTitle": "Aliasuri de model",
"modelAliasesDesc": "Modele wildcard pentru a remapa numele modelelor • Utilizați * și ?",
"addCustomAlias": "Adaugă Alias Personalizat",
"deprecatedModelId": "ID model depreciat",
"newModelId": "ID model nou",
"customAliases": "Aliasuri personalizate",
"builtInAliases": "Aliasuri încorporate",
"backgroundDegradationTitle": "Degradare sarcini în fundal",
"backgroundDegradationDesc": "Detectează automat sarcinile în fundal (titluri, rezumate) și redirecționează către modele mai ieftine",
"enableDegradation": "Activează degradarea sarcinilor în fundal",
"enableDegradationHint": "Când este activat, sarcinile în fundal precum generarea de titluri și rezumate sunt redirecționate automat către modele mai ieftine",
"tasksDetected": "Sarcini detectate",
"degradationMap": "Hartă de degradare a modelelor",
"premiumModel": "Model premium",
"cheapModel": "Model ieftin",
"detectionPatterns": "Modele de detecție",
"newPattern": "ex: \"generează un titlu\"",
"aliasPatternPlaceholder": "claude-sonet-*",
"aliasTargetPlaceholder": "claude-sonet-4-20250514",
"pattern": "Model",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Jetoane utilizate pentru a crea intrări în cache (retur la rata de intrare)",
"customPricingNote": "Puteți suprascrie prețurile implicite pentru anumite modele. Anulările personalizate au prioritate față de prețurile detectate automat.",
"editPricing": "Editați prețul",
"viewFullDetails": "Vezi detalii complete",
"modelAliasesTitle": "Aliasuri de model",
"addCustomAlias": "Adaugă Alias Personalizat",
"deprecatedModelId": "ID model depreciat",
"newModelId": "ID model nou",
"customAliases": "Aliasuri personalizate",
"builtInAliases": "Aliasuri încorporate",
"backgroundDegradationTitle": "Degradare sarcini în fundal",
"backgroundDegradationDesc": "Detectează automat sarcinile în fundal (titluri, rezumate) și redirecționează către modele mai ieftine",
"enableDegradation": "Activează degradarea sarcinilor în fundal",
"enableDegradationHint": "Când este activat, sarcinile în fundal precum generarea de titluri și rezumate sunt redirecționate automat către modele mai ieftine",
"tasksDetected": "Sarcini detectate",
"degradationMap": "Hartă de degradare a modelelor",
"premiumModel": "Model premium",
"cheapModel": "Model ieftin",
"detectionPatterns": "Modele de detecție",
"newPattern": "ex: \"generează un titlu\""
"viewFullDetails": "Vezi detalii complete"
},
"translator": {
"title": "Traducător",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Furnizorii",
"commonUseCases": "Cazuri comune de utilizare",
"clientCompatibility": "Compatibilitate client",
"protocolsToc": "Protocols",
"apiReference": "Referință API",
"method": "Metoda",
"path": "Calea",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Utilizați",
"clientClaudeBullet1Middle": "(Claude) sau",
"clientClaudeBullet1Suffix": "(antigravitație) prefix.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Punct final de chat compatibil cu OpenAI (implicit).",
"endpointResponsesNote": "Punct final API pentru răspunsuri (Codex, serie o).",
"endpointModelsNote": "Catalog model pentru toți furnizorii conectați.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute este furnizat „ca atare”, fără garanții de niciun fel. Nu suntem responsabili pentru costurile suportate prin utilizarea API-ului, întreruperile serviciilor sau pierderea datelor. Păstrați întotdeauna copii de siguranță ale configurației dvs.",
"termsSection6Title": "6. Open Source",
"termsSection6Text": "OmniRoute este un software open-source. Sunteți liber să îl inspectați, să modificați și să îl distribuiți în conformitate cu termenii licenței sale."
},
"media": {
"title": "Studio media",
"subtitle": "Generează imagini, videoclipuri și muzică",
"model": "Model",
"prompt": "Prompt",
"generate": "Generează",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Здоровье",
"limits": "Лимиты и квоты",
"cliTools": "Инструменты интерфейса командной строки",
"media": "Медиа",
"settings": "Настройки",
"translator": "Переводчик",
"docs": "Документы",
"issues": "Проблемы",
"endpoint": "Конечная точка",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Менеджер API",
"logs": "Журналы",
"auditLog": "Журнал аудита",
@@ -99,8 +102,7 @@
"themeGreen": "Зелёный",
"themeViolet": "Фиолетовый",
"themeOrange": "Оранжевый",
"themeCyan": "Голубой",
"media": "Медиа"
"themeCyan": "Голубой"
},
"themesPage": {
"title": "Темы",
@@ -128,10 +130,16 @@
"homeDescription": "Добро пожаловать в OmniRoute",
"endpoint": "Конечная точка",
"endpointDescription": "Конфигурация конечной точки API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Настройки",
"settingsDescription": "Управляйте своими предпочтениями",
"openaiCompatible": "Совместимость с OpenAI",
"anthropicCompatible": "Антропная совместимость",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Темы",
"themesDescription": "Выберите цветовую тему для всей панели"
},
@@ -283,6 +291,21 @@
"showing": "Показаны записи {count} (смещение {offset})",
"previous": "Предыдущий"
},
"media": {
"title": "Медиа-площадка",
"subtitle": "Генерируйте изображения, видео и музыку",
"model": "Model",
"prompt": "Prompt",
"generate": "Сгенерировать",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Инструменты интерфейса командной строки",
"noActiveProviders": "Нет активных провайдеров",
@@ -555,7 +578,75 @@
"saving": "Сохранение...",
"weighted": "Взвешенный",
"leastUsed": "Наименее используемый",
"costOpt": "Цена-опция"
"costOpt": "Цена-опция",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Максимальная продолжительность запроса до прерывания.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Максимальное количество одновременных запросов, разрешенных для каждой модели в циклическом переборе.",
"queueTimeout": "Как долго запрос может находиться в очереди до истечения времени ожидания."
},
"templatesTitle": "Быстрые шаблоны",
"templatesDescription": "Примените стартовый профиль, затем настройте модели и конфигурации.",
"templateApply": "Применить шаблон",
"templateHighAvailability": "Высокая доступность",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Затраты",
@@ -596,6 +687,13 @@
"textToSpeechDesc": "Преобразование текста в естественно звучащую речь",
"moderations": "Модерации",
"moderationsDesc": "Модерация контента и классификация безопасности",
"responsesDesc": "OpenAI Responses API для Codex и продвинутых агентных рабочих процессов",
"listModelsDesc": "Список всех доступных моделей по всем подключённым провайдерам",
"settingsApiDesc": "Чтение и изменение конфигурации OmniRoute через API",
"settingsApi": "Settings API",
"categoryCore": "Основные API",
"categoryMedia": "Медиа и мультимодальность",
"categoryUtility": "Утилиты и управление",
"enableCloudTitle": "Включить облачный прокси",
"whatYouGet": "Что вы получите",
"cloudBenefitAccess": "Доступ к вашему API из любой точки мира",
@@ -635,13 +733,154 @@
"image": "Изображение",
"custom": "обычай",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API для Codex и продвинутых агентных рабочих процессов",
"listModelsDesc": "Список всех доступных моделей по всем подключённым провайдерам",
"settingsApi": "Settings API",
"settingsApiDesc": "Чтение и изменение конфигурации OmniRoute через API",
"categoryCore": "Основные API",
"categoryMedia": "Медиа и мультимодальность",
"categoryUtility": "Утилиты и управление"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Здоровье системы",
@@ -1202,7 +1441,23 @@
"stickyLimit": "Липкий лимит",
"stickyLimitDesc": "Звонки на аккаунт до переключения",
"modelAliases": "Псевдонимы моделей",
"modelAliasesTitle": "Псевдонимы моделей",
"modelAliasesDesc": "Шаблоны подстановочных знаков для переназначения названий моделей • Используйте * и ?",
"addCustomAlias": "Добавить пользовательский псевдоним",
"deprecatedModelId": "Устаревший ID модели",
"newModelId": "Новый ID модели",
"customAliases": "Пользовательские псевдонимы",
"builtInAliases": "Встроенные псевдонимы",
"backgroundDegradationTitle": "Деградация фоновых задач",
"backgroundDegradationDesc": "Автоматически обнаруживает фоновые задачи (заголовки, резюме) и перенаправляет на более дешёвые модели",
"enableDegradation": "Включить деградацию фоновых задач",
"enableDegradationHint": "Когда включено, фоновые задачи, такие как генерация заголовков и резюмирование, автоматически перенаправляются на более дешёвые модели",
"tasksDetected": "Обнаружено задач",
"degradationMap": "Карта деградации моделей",
"premiumModel": "Премиум-модель",
"cheapModel": "Дешёвая модель",
"detectionPatterns": "Шаблоны обнаружения",
"newPattern": "напр. \"создать заголовок\"",
"aliasPatternPlaceholder": "Клод-сонет-*",
"aliasTargetPlaceholder": "Клод-сонет-4-20250514",
"pattern": "Узор",
@@ -1420,23 +1675,7 @@
"cacheCreationTokenDesc": "Токены, используемые для создания записей в кэше (возврат к скорости ввода)",
"customPricingNote": "Вы можете переопределить цены по умолчанию для определенных моделей. Пользовательские переопределения имеют приоритет над ценами, определяемыми автоматически.",
"editPricing": "Изменить цену",
"viewFullDetails": "Посмотреть полную информацию",
"modelAliasesTitle": "Псевдонимы моделей",
"addCustomAlias": "Добавить пользовательский псевдоним",
"deprecatedModelId": "Устаревший ID модели",
"newModelId": "Новый ID модели",
"customAliases": "Пользовательские псевдонимы",
"builtInAliases": "Встроенные псевдонимы",
"backgroundDegradationTitle": "Деградация фоновых задач",
"backgroundDegradationDesc": "Автоматически обнаруживает фоновые задачи (заголовки, резюме) и перенаправляет на более дешёвые модели",
"enableDegradation": "Включить деградацию фоновых задач",
"enableDegradationHint": "Когда включено, фоновые задачи, такие как генерация заголовков и резюмирование, автоматически перенаправляются на более дешёвые модели",
"tasksDetected": "Обнаружено задач",
"degradationMap": "Карта деградации моделей",
"premiumModel": "Премиум-модель",
"cheapModel": "Дешёвая модель",
"detectionPatterns": "Шаблоны обнаружения",
"newPattern": "напр. \"создать заголовок\""
"viewFullDetails": "Посмотреть полную информацию"
},
"translator": {
"title": "Переводчик",
@@ -1942,6 +2181,7 @@
"supportedProvidersToc": "Провайдеры",
"commonUseCases": "Общие случаи использования",
"clientCompatibility": "Совместимость клиентов",
"protocolsToc": "Protocols",
"apiReference": "Справочник по API",
"method": "Метод",
"path": "Путь",
@@ -2014,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Использование",
"clientClaudeBullet1Middle": "(Клод) или",
"clientClaudeBullet1Suffix": "(Антигравитация) приставка.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Конечная точка чата, совместимая с OpenAI (по умолчанию).",
"endpointResponsesNote": "Конечная точка API ответов (Кодекс, серия o).",
"endpointModelsNote": "Каталог моделей для всех подключенных провайдеров.",
@@ -2092,20 +2348,5 @@
"termsSection5Text": "OmniRoute предоставляется «как есть» без каких-либо гарантий. Мы не несем ответственности за любые расходы, понесенные в результате использования API, перебоев в обслуживании или потери данных. Всегда сохраняйте резервные копии вашей конфигурации.",
"termsSection6Title": "6. Открытый исходный код",
"termsSection6Text": "OmniRoute — это программное обеспечение с открытым исходным кодом. Вы можете свободно просматривать, изменять и распространять его в соответствии с условиями лицензии."
},
"media": {
"title": "Медиа-площадка",
"subtitle": "Генерируйте изображения, видео и музыку",
"model": "Model",
"prompt": "Prompt",
"generate": "Сгенерировать",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Zdravie",
"limits": "Limity a kvóty",
"cliTools": "Nástroje CLI",
"media": "Médiá",
"settings": "Nastavenia",
"translator": "Prekladateľ",
"docs": "Docs",
"issues": "Problémy",
"endpoint": "Koncový bod",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API Manager",
"logs": "Denníky",
"auditLog": "Audit Log",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Proxy server bol zastavený alebo sa reštartuje.",
"expandSidebar": "Rozbaliť bočný panel",
"collapseSidebar": "Zbaliť bočný panel",
"media": "Médiá"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Odhlásiť sa",
@@ -108,10 +130,18 @@
"homeDescription": "Vitajte v OmniRoute",
"endpoint": "Koncový bod",
"endpointDescription": "Konfigurácia koncového bodu API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Nastavenia",
"settingsDescription": "Spravujte svoje preferencie",
"openaiCompatible": "Kompatibilné s OpenAI",
"anthropicCompatible": "Antropické kompatibilné"
"anthropicCompatible": "Antropické kompatibilné",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Rýchly štart",
@@ -261,6 +291,21 @@
"showing": "Zobrazuje sa {count} záznamov (posun {offset})",
"previous": "Predchádzajúce"
},
"media": {
"title": "Mediálne ihrisko",
"subtitle": "Generujte obrázky, videá a hudbu",
"model": "Model",
"prompt": "Prompt",
"generate": "Generovať",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Nástroje CLI",
"noActiveProviders": "Žiadni aktívni poskytovatelia",
@@ -533,7 +578,75 @@
"saving": "Ukladá sa...",
"weighted": "Vážené",
"leastUsed": "Najmenej používané",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "náklady",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Prevod textu na prirodzene znejúcu reč",
"moderations": "Moderovania",
"moderationsDesc": "Moderovanie obsahu a klasifikácia bezpečnosti",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Základné API",
"categoryMedia": "Médiá a multi-modálne",
"categoryUtility": "Nástroje a správa",
"enableCloudTitle": "Povoliť Cloud Proxy",
"whatYouGet": "Čo získate",
"cloudBenefitAccess": "Získajte prístup k svojmu API odkiaľkoľvek na svete",
@@ -613,13 +733,154 @@
"image": "Obrázok",
"custom": "zvykom",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Základné API",
"categoryMedia": "Médiá a multi-modálne",
"categoryUtility": "Nástroje a správa"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "konzervatívny",
"applyProfile": "Použiť profil",
"resetCircuitBreakers": "Resetujte ističe",
"resetCircuitBreakersHelp": "Vymaže aktuálny stav ističa a počítadlá porúch pre poskytovateľov.",
"resetAllBreakers": "Resetujte všetky ističe",
"toolsAndScopes": "Nástroje a rozsahy",
"tableTool": "Nástroj",
"tableScopes": "Rozsahy",
"tablePhase": "Fáza",
"tableAudit": "Audit",
"auditLog": "Protokol auditu",
"auditSummary": "Volá: {total} | stránka {page} z {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Zdravie systému",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Vyberte prednastavenú farbu alebo si vytvorte vlastnú tému jednou farbou",
"themeCreate": "Vytvoriť tému",
"themeCustom": "Vlastná téma",
"themeCoral": "Koralový",
"themeBlue": "Modrá",
"themeRed": "Červená",
"themeGreen": "Zelená",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Sticky Limit",
"stickyLimitDesc": "Hovory na účet pred prepnutím",
"modelAliases": "Aliasy modelov",
"modelAliasesTitle": "Aliasy modelov",
"modelAliasesDesc": "Vzory zástupných znakov na premapovanie názvov modelov • Použite * a ?",
"addCustomAlias": "Pridať vlastný alias",
"deprecatedModelId": "Zastaraný ID modelu",
"newModelId": "Nový ID modelu",
"customAliases": "Vlastné aliasy",
"builtInAliases": "Vstavané aliasy",
"backgroundDegradationTitle": "Degradácia úloh na pozadí",
"backgroundDegradationDesc": "Automaticky detekuje úlohy na pozadí (titulky, súhrny) a presmeruje na lacnejšie modely",
"enableDegradation": "Povoliť degradáciu úloh na pozadí",
"enableDegradationHint": "Keď je povolené, úlohy na pozadí, ako generovanie titukov a súhrnov, sú automaticky presmerované na lacnejšie modely",
"tasksDetected": "Zistené úlohy",
"degradationMap": "Mapa degradácie modelov",
"premiumModel": "Prémiový model",
"cheapModel": "Lacný model",
"detectionPatterns": "Vzory detekcie",
"newPattern": "napr. \"vygenerovať titulok\"",
"aliasPatternPlaceholder": "claude-sonnet-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Vzor",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Tokeny používané na vytváranie záznamov vo vyrovnávacej pamäti (záložná rýchlosť vstupu)",
"customPricingNote": "Predvolené ceny pre konkrétne modely môžete prepísať. Vlastné prepísania majú prednosť pred automaticky zistenými cenami.",
"editPricing": "Upraviť ceny",
"viewFullDetails": "Zobraziť úplné podrobnosti",
"modelAliasesTitle": "Aliasy modelov",
"addCustomAlias": "Pridať vlastný alias",
"deprecatedModelId": "Zastaraný ID modelu",
"newModelId": "Nový ID modelu",
"customAliases": "Vlastné aliasy",
"builtInAliases": "Vstavané aliasy",
"backgroundDegradationTitle": "Degradácia úloh na pozadí",
"backgroundDegradationDesc": "Automaticky detekuje úlohy na pozadí (titulky, súhrny) a presmeruje na lacnejšie modely",
"enableDegradation": "Povoliť degradáciu úloh na pozadí",
"enableDegradationHint": "Keď je povolené, úlohy na pozadí, ako generovanie titukov a súhrnov, sú automaticky presmerované na lacnejšie modely",
"tasksDetected": "Zistené úlohy",
"degradationMap": "Mapa degradácie modelov",
"premiumModel": "Prémiový model",
"cheapModel": "Lacný model",
"detectionPatterns": "Vzory detekcie",
"newPattern": "napr. \"vygenerovať titulok\""
"viewFullDetails": "Zobraziť úplné podrobnosti"
},
"translator": {
"title": "Prekladateľ",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Poskytovatelia",
"commonUseCases": "Bežné prípady použitia",
"clientCompatibility": "Kompatibilita klienta",
"protocolsToc": "Protocols",
"apiReference": "Referencia API",
"method": "Metóda",
"path": "Cesta",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Použite",
"clientClaudeBullet1Middle": "(Claude) alebo",
"clientClaudeBullet1Suffix": "(antigravitačná) predpona.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Koncový bod chatu kompatibilný s OpenAI (predvolené).",
"endpointResponsesNote": "Koncový bod API odpovedí (Codex, o-series).",
"endpointModelsNote": "Modelový katalóg pre všetkých pripojených poskytovateľov.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute sa poskytuje „tak ako je“ bez záruky akéhokoľvek druhu. Nezodpovedáme za žiadne náklady vzniknuté používaním API, prerušením služieb alebo stratou údajov. Vždy si zálohujte svoju konfiguráciu.",
"termsSection6Title": "6. Otvorený zdroj",
"termsSection6Text": "OmniRoute je softvér s otvoreným zdrojovým kódom. Môžete ho voľne kontrolovať, upravovať a distribuovať v súlade s podmienkami jeho licencie."
},
"media": {
"title": "Mediálne ihrisko",
"subtitle": "Generujte obrázky, videá a hudbu",
"model": "Model",
"prompt": "Prompt",
"generate": "Generovať",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Hälsa",
"limits": "Gränser och kvoter",
"cliTools": "CLI-verktyg",
"media": "Media",
"settings": "Inställningar",
"translator": "Översättare",
"docs": "Dokument",
"issues": "frågor",
"endpoint": "Slutpunkt",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API-hanterare",
"logs": "Loggar",
"auditLog": "Revisionslogg",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Proxyservern har stoppats eller startar om.",
"expandSidebar": "Expandera sidofältet",
"collapseSidebar": "Dölj sidofältet",
"media": "Media"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Logga ut",
@@ -108,10 +130,18 @@
"homeDescription": "Välkommen till OmniRoute",
"endpoint": "Slutpunkt",
"endpointDescription": "API-slutpunktskonfiguration",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Inställningar",
"settingsDescription": "Hantera dina preferenser",
"openaiCompatible": "OpenAI-kompatibel",
"anthropicCompatible": "Antropisk kompatibel"
"anthropicCompatible": "Antropisk kompatibel",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Snabbstart",
@@ -261,6 +291,21 @@
"showing": "Visar {count} poster (offset {offset})",
"previous": "Föregående"
},
"media": {
"title": "Medialabb",
"subtitle": "Generera bilder, videor och musik",
"model": "Model",
"prompt": "Prompt",
"generate": "Generera",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI-verktyg",
"noActiveProviders": "Inga aktiva leverantörer",
@@ -533,7 +578,75 @@
"saving": "Sparar...",
"weighted": "Viktad",
"leastUsed": "Minst använda",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "inget pris",
"warningRoundRobinSingleModel": "Round-robin är mest användbar med minst 2 modeller.",
"warningCostOptimizedPartialPricing": "Endast {priced} av {total} modeller har prissättning. Rutning kan vara delvis kostnadsmedveten.",
"warningCostOptimizedNoPricing": "Inga prisuppgifter hittades för denna kombination. Kostnadsoptimerad kan väga oväntat."
},
"costs": {
"title": "Kostnader",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Konvertera text till naturligt klingande tal",
"moderations": "Moderationer",
"moderationsDesc": "Innehållsmoderering och säkerhetsklassificering",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Kärn-API:er",
"categoryMedia": "Media & Multimodal",
"categoryUtility": "Verktyg & Hantering",
"enableCloudTitle": "Aktivera Cloud Proxy",
"whatYouGet": "Vad du kommer att få",
"cloudBenefitAccess": "Få åtkomst till ditt API från var som helst i världen",
@@ -613,13 +733,154 @@
"image": "Bild",
"custom": "anpassad",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Kärn-API:er",
"categoryMedia": "Media & Multimodal",
"categoryUtility": "Verktyg & Hantering"
"sectionTitle": "Integrationsyta",
"sectionDescription": "OpenAI-kompatibla API:er och operativa protokollslutpunkter",
"tabApis": "OpenAI-kompatibla API:er",
"tabProtocols": "Protokoll",
"tabsAria": "Slutpunktssektioner",
"protocolsTitle": "Protokoll",
"protocolsDescription": "MCP och A2A är förstklassiga endpoints med dedikerad observerbarhet och kontroller.",
"mcpCardTitle": "MCP-server",
"mcpCardDescription": "Model Context Protocol över stdio",
"a2aCardTitle": "A2A-server",
"a2aCardDescription": "Agent2Agent JSON-RPC-slutpunkt",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Systemhälsa",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Välj en förinställd färg eller skapa ditt eget tema med en färg",
"themeCreate": "Skapa tema",
"themeCustom": "Anpassat tema",
"themeCoral": "Korall",
"themeBlue": "Blå",
"themeRed": "Röd",
"themeGreen": "Grön",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Sticky Limit",
"stickyLimitDesc": "Samtal per konto innan byte",
"modelAliases": "Modellalias",
"modelAliasesTitle": "Modellalias",
"modelAliasesDesc": "Jokerteckenmönster för att mappa om modellnamn • Använd * och ?",
"addCustomAlias": "Lägg Till Anpassat Alias",
"deprecatedModelId": "Föråldrat modell-ID",
"newModelId": "Nytt modell-ID",
"customAliases": "Anpassade Alias",
"builtInAliases": "Inbyggda Alias",
"backgroundDegradationTitle": "Bakgrundsuppgifter Degradering",
"backgroundDegradationDesc": "Upptäcker automatiskt bakgrundsuppgifter (titlar, sammanfattningar) och dirigerar till billigare modeller",
"enableDegradation": "Aktivera Bakgrundsdegradation",
"enableDegradationHint": "När aktiverat, dirigeras bakgrundsuppgifter som titelgenerering och sammanfattningar automatiskt till billigare modeller",
"tasksDetected": "Uppgifter upptäckta",
"degradationMap": "Modelldegraderingsschema",
"premiumModel": "Premiummodell",
"cheapModel": "Billig modell",
"detectionPatterns": "Detektionsmönster",
"newPattern": "t.ex. \"generera en titel\"",
"aliasPatternPlaceholder": "claude-sonnett-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Mönster",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Tokens som används för att skapa cacheposter (återgång till inmatningshastighet)",
"customPricingNote": "Du kan åsidosätta standardpriser för specifika modeller. Anpassade åsidosättningar har prioritet framför automatiskt identifierade priser.",
"editPricing": "Redigera prissättning",
"viewFullDetails": "Visa fullständiga detaljer",
"modelAliasesTitle": "Modellalias",
"addCustomAlias": "Lägg Till Anpassat Alias",
"deprecatedModelId": "Föråldrat modell-ID",
"newModelId": "Nytt modell-ID",
"customAliases": "Anpassade Alias",
"builtInAliases": "Inbyggda Alias",
"backgroundDegradationTitle": "Bakgrundsuppgifter Degradering",
"backgroundDegradationDesc": "Upptäcker automatiskt bakgrundsuppgifter (titlar, sammanfattningar) och dirigerar till billigare modeller",
"enableDegradation": "Aktivera Bakgrundsdegradation",
"enableDegradationHint": "När aktiverat, dirigeras bakgrundsuppgifter som titelgenerering och sammanfattningar automatiskt till billigare modeller",
"tasksDetected": "Uppgifter upptäckta",
"degradationMap": "Modelldegraderingsschema",
"premiumModel": "Premiummodell",
"cheapModel": "Billig modell",
"detectionPatterns": "Detektionsmönster",
"newPattern": "t.ex. \"generera en titel\""
"viewFullDetails": "Visa fullständiga detaljer"
},
"translator": {
"title": "Översättare",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Leverantörer",
"commonUseCases": "Vanliga användningsfall",
"clientCompatibility": "Klientkompatibilitet",
"protocolsToc": "Protokoll",
"apiReference": "API-referens",
"method": "Metod",
"path": "Väg",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "Använd",
"clientClaudeBullet1Middle": "(Claude) eller",
"clientClaudeBullet1Suffix": "(Antigravitation) prefix.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "OpenAI-kompatibel chattslutpunkt (standard).",
"endpointResponsesNote": "Responses API-slutpunkt (Codex, o-serien).",
"endpointModelsNote": "Modellkatalog för alla anslutna leverantörer.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute tillhandahålls \"i befintligt skick\" utan garanti av något slag. Vi ansvarar inte för några kostnader som uppstår genom API-användning, tjänstavbrott eller dataförlust. Behåll alltid säkerhetskopior av din konfiguration.",
"termsSection6Title": "6. Öppen källkod",
"termsSection6Text": "OmniRoute är programvara med öppen källkod. Du är fri att inspektera, modifiera och distribuera den enligt villkoren i dess licens."
},
"media": {
"title": "Medialabb",
"subtitle": "Generera bilder, videor och musik",
"model": "Model",
"prompt": "Prompt",
"generate": "Generera",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "สุขภาพ",
"limits": "ขีดจำกัดและโควต้า",
"cliTools": "เครื่องมือ CLI",
"media": "สื่อ",
"settings": "การตั้งค่า",
"translator": "นักแปล",
"docs": "เอกสาร",
"issues": "ประเด็นต่างๆ",
"endpoint": "จุดสิ้นสุด",
"mcp": "เอ็มซีพี",
"a2a": "เอทูเอ",
"apiManager": "ผู้จัดการ API",
"logs": "บันทึก",
"auditLog": "บันทึกการตรวจสอบ",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "พร็อกซีเซิร์ฟเวอร์ถูกหยุดหรือกำลังรีสตาร์ท",
"expandSidebar": "ขยายแถบด้านข้าง",
"collapseSidebar": "ยุบแถบด้านข้าง",
"media": "สื่อ"
"themes": "ธีมส์",
"presetColors": "สียอดนิยม",
"createTheme": "สร้างธีม",
"chooseColor": "เลือกหนึ่งสี",
"themeCoral": "ปะการัง",
"themeBlue": "สีฟ้า",
"themeRed": "สีแดง",
"themeGreen": "สีเขียว",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "ธีมส์",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "สียอดนิยม",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "สร้างธีม",
"activePreset": "Active theme"
},
"header": {
"logout": "ออกจากระบบ",
@@ -108,10 +130,18 @@
"homeDescription": "ยินดีต้อนรับสู่ OmniRoute",
"endpoint": "จุดสิ้นสุด",
"endpointDescription": "การกำหนดค่าจุดสิ้นสุด API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "การตั้งค่า",
"settingsDescription": "จัดการการตั้งค่าของคุณ",
"openaiCompatible": "รองรับ OpenAI",
"anthropicCompatible": "เข้ากันได้กับมานุษยวิทยา"
"anthropicCompatible": "เข้ากันได้กับมานุษยวิทยา",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "ธีมส์",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "เริ่มต้นอย่างรวดเร็ว",
@@ -261,6 +291,21 @@
"showing": "กำลังแสดงรายการ {count} (ออฟเซ็ต {offset})",
"previous": "ก่อนหน้า"
},
"media": {
"title": "สนามทดลองสื่อ",
"subtitle": "สร้างภาพ วิดีโอ และเพลง",
"model": "Model",
"prompt": "Prompt",
"generate": "สร้าง",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "เครื่องมือ CLI",
"noActiveProviders": "ไม่มีผู้ให้บริการที่ใช้งานอยู่",
@@ -533,7 +578,75 @@
"saving": "กำลังบันทึก...",
"weighted": "ถ่วงน้ำหนัก",
"leastUsed": "ใช้น้อยที่สุด",
"costOpt": "ต้นทุน-การเลือก"
"costOpt": "ต้นทุน-การเลือก",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "ค่าใช้จ่าย",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "แปลงข้อความเป็นคำพูดที่ฟังดูเป็นธรรมชาติ",
"moderations": "การกลั่นกรอง",
"moderationsDesc": "การกลั่นกรองเนื้อหาและการจำแนกความปลอดภัย",
"responsesDesc": "OpenAI Responses API สำหรับ Codex และเวิร์กโฟลว์เอเจนต์ขั้นสูง",
"listModelsDesc": "แสดงรายการโมเดลที่ใช้ได้ทั้งหมดจากผู้ให้บริการที่เชื่อมต่อ",
"settingsApiDesc": "อ่านและแก้ไขการกำหนดค่า OmniRoute ผ่าน API",
"settingsApi": "Settings API",
"categoryCore": "API หลัก",
"categoryMedia": "สื่อและมัลติโมดอล",
"categoryUtility": "ยูทิลิตี้และการจัดการ",
"enableCloudTitle": "เปิดใช้งานพร็อกซีคลาวด์",
"whatYouGet": "สิ่งที่คุณจะได้รับ",
"cloudBenefitAccess": "เข้าถึง API ของคุณได้จากทุกที่ในโลก",
@@ -613,13 +733,154 @@
"image": "รูปภาพ",
"custom": "กำหนดเอง",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API สำหรับ Codex และเวิร์กโฟลว์เอเจนต์ขั้นสูง",
"listModelsDesc": "แสดงรายการโมเดลที่ใช้ได้ทั้งหมดจากผู้ให้บริการที่เชื่อมต่อ",
"settingsApi": "Settings API",
"settingsApiDesc": "อ่านและแก้ไขการกำหนดค่า OmniRoute ผ่าน API",
"categoryCore": "API หลัก",
"categoryMedia": "สื่อและมัลติโมดอล",
"categoryUtility": "ยูทิลิตี้และการจัดการ"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "ผลลัพธ์",
"tableApiKey": "คีย์เอพีไอ",
"failed": "ล้มเหลว",
"previous": "ก่อนหน้า",
"next": "ต่อไป"
},
"a2aDashboard": {
"loading": "กำลังโหลดแดชบอร์ด A2A...",
"confirmCancelTask": "ยกเลิกงาน {taskId}?",
"cancelTaskFailed": "ยกเลิกงานไม่สำเร็จ",
"cancelTaskSuccess": "งาน {taskId} ถูกยกเลิก",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "ล้มเหลว",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "ก่อนหน้า",
"next": "ต่อไป",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "สุขภาพของระบบ",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "เลือกสีสำเร็จรูปหรือสร้างธีมของคุณเองด้วยสีเดียว",
"themeCreate": "สร้างธีม",
"themeCustom": "ธีมกำหนดเอง",
"themeCoral": "คอรัล",
"themeBlue": "น้ำเงิน",
"themeRed": "แดง",
"themeGreen": "เขียว",
@@ -1181,7 +1441,23 @@
"stickyLimit": "ขีด จำกัด เหนียว",
"stickyLimitDesc": "โทรต่อบัญชีก่อนที่จะเปลี่ยน",
"modelAliases": "นามแฝงของโมเดล",
"modelAliasesTitle": "นามแฝงโมเดล",
"modelAliasesDesc": "รูปแบบไวด์การ์ดเพื่อทำการแมปชื่อโมเดลใหม่ • ใช้ * และ ?",
"addCustomAlias": "เพิ่มนามแฝงที่กำหนดเอง",
"deprecatedModelId": "ID โมเดลที่เลิกใช้",
"newModelId": "ID โมเดลใหม่",
"customAliases": "นามแฝงที่กำหนดเอง",
"builtInAliases": "นามแฝงในตัว",
"backgroundDegradationTitle": "การลดระดับงานพื้นหลัง",
"backgroundDegradationDesc": "ตรวจจับงานพื้นหลังโดยอัตโนมัติ (ชื่อเรื่อง, สรุป) และเปลี่ยนเส้นทางไปยังโมเดลที่ถูกกว่า",
"enableDegradation": "เปิดใช้งานการลดระดับงานพื้นหลัง",
"enableDegradationHint": "เมื่อเปิดใช้งาน งานพื้นหลังเช่นการสร้างชื่อเรื่องและสรุปจะถูกเปลี่ยนเส้นทางไปยังโมเดลที่ถูกกว่าโดยอัตโนมัติ",
"tasksDetected": "งานที่ตรวจพบ",
"degradationMap": "แผนผังการลดระดับโมเดล",
"premiumModel": "โมเดลพรีเมียม",
"cheapModel": "โมเดลราคาถูก",
"detectionPatterns": "รูปแบบการตรวจจับ",
"newPattern": "เช่น \"สร้างชื่อเรื่อง\"",
"aliasPatternPlaceholder": "คลอด-โคลง-*",
"aliasTargetPlaceholder": "คลอด-โคลง-4-20250514",
"pattern": "รูปแบบ",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "โทเค็นที่ใช้ในการสร้างรายการแคช (สำรองไปยังอัตราการป้อนข้อมูล)",
"customPricingNote": "คุณสามารถแทนที่ราคาเริ่มต้นสำหรับรุ่นเฉพาะได้ การแทนที่แบบกำหนดเองจะมีลำดับความสำคัญมากกว่าการกำหนดราคาที่ตรวจพบอัตโนมัติ",
"editPricing": "แก้ไขราคา",
"viewFullDetails": "ดูรายละเอียดทั้งหมด",
"modelAliasesTitle": "นามแฝงโมเดล",
"addCustomAlias": "เพิ่มนามแฝงที่กำหนดเอง",
"deprecatedModelId": "ID โมเดลที่เลิกใช้",
"newModelId": "ID โมเดลใหม่",
"customAliases": "นามแฝงที่กำหนดเอง",
"builtInAliases": "นามแฝงในตัว",
"backgroundDegradationTitle": "การลดระดับงานพื้นหลัง",
"backgroundDegradationDesc": "ตรวจจับงานพื้นหลังโดยอัตโนมัติ (ชื่อเรื่อง, สรุป) และเปลี่ยนเส้นทางไปยังโมเดลที่ถูกกว่า",
"enableDegradation": "เปิดใช้งานการลดระดับงานพื้นหลัง",
"enableDegradationHint": "เมื่อเปิดใช้งาน งานพื้นหลังเช่นการสร้างชื่อเรื่องและสรุปจะถูกเปลี่ยนเส้นทางไปยังโมเดลที่ถูกกว่าโดยอัตโนมัติ",
"tasksDetected": "งานที่ตรวจพบ",
"degradationMap": "แผนผังการลดระดับโมเดล",
"premiumModel": "โมเดลพรีเมียม",
"cheapModel": "โมเดลราคาถูก",
"detectionPatterns": "รูปแบบการตรวจจับ",
"newPattern": "เช่น \"สร้างชื่อเรื่อง\""
"viewFullDetails": "ดูรายละเอียดทั้งหมด"
},
"translator": {
"title": "นักแปล",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "ผู้ให้บริการ",
"commonUseCases": "กรณีการใช้งานทั่วไป",
"clientCompatibility": "ความเข้ากันได้ของไคลเอ็นต์",
"protocolsToc": "Protocols",
"apiReference": "การอ้างอิง API",
"method": "วิธีการ",
"path": "เส้นทาง",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "ใช้",
"clientClaudeBullet1Middle": "(คลอดด์) หรือ",
"clientClaudeBullet1Suffix": "(ต้านแรงโน้มถ่วง) คำนำหน้า",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "จุดสิ้นสุดการแชทที่เข้ากันได้กับ OpenAI (ค่าเริ่มต้น)",
"endpointResponsesNote": "จุดสิ้นสุด API การตอบกลับ (Codex, o-series)",
"endpointModelsNote": "แค็ตตาล็อกโมเดลสำหรับผู้ให้บริการที่เชื่อมต่อทั้งหมด",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute มีให้ \"ตามสภาพ\" โดยไม่มีการรับประกันใดๆ เราจะไม่รับผิดชอบต่อค่าใช้จ่ายใดๆ ที่เกิดขึ้นจากการใช้ API การหยุดชะงักของบริการ หรือการสูญหายของข้อมูล สำรองข้อมูลการกำหนดค่าของคุณไว้เสมอ",
"termsSection6Title": "6. โอเพ่นซอร์ส",
"termsSection6Text": "OmniRoute เป็นซอฟต์แวร์โอเพ่นซอร์ส คุณมีอิสระที่จะตรวจสอบ แก้ไข และแจกจ่ายภายใต้เงื่อนไขของใบอนุญาต"
},
"media": {
"title": "สนามทดลองสื่อ",
"subtitle": "สร้างภาพ วิดีโอ และเพลง",
"model": "Model",
"prompt": "Prompt",
"generate": "สร้าง",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "Здоров'я",
"limits": "Ліміти та квоти",
"cliTools": "Інструменти CLI",
"media": "Медіа",
"settings": "Налаштування",
"translator": "Перекладач",
"docs": "документи",
"issues": "Питання",
"endpoint": "Кінцева точка",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Менеджер API",
"logs": "Журнали",
"auditLog": "Журнал аудиту",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Проксі-сервер зупинено або перезавантажується.",
"expandSidebar": "Розгорнути бічну панель",
"collapseSidebar": "Згорнути бічну панель",
"media": "Медіа"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Вийти",
@@ -108,10 +130,18 @@
"homeDescription": "Ласкаво просимо до OmniRoute",
"endpoint": "Кінцева точка",
"endpointDescription": "Конфігурація кінцевої точки API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Налаштування",
"settingsDescription": "Керуйте своїми вподобаннями",
"openaiCompatible": "Сумісність з OpenAI",
"anthropicCompatible": "Антропна сумісність"
"anthropicCompatible": "Антропна сумісність",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Швидкий старт",
@@ -261,6 +291,21 @@
"showing": "Показано {count} записів (зміщення {offset})",
"previous": "Попередній"
},
"media": {
"title": "Медіа-майданчик",
"subtitle": "Генеруйте зображення, відео та музику",
"model": "Model",
"prompt": "Prompt",
"generate": "Згенерувати",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Інструменти CLI",
"noActiveProviders": "Немає активних провайдерів",
@@ -533,7 +578,75 @@
"saving": "Збереження...",
"weighted": "Зважений",
"leastUsed": "Найменш використовуваний",
"costOpt": "Cost-Opt"
"costOpt": "Cost-Opt",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Витрати",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Перетворення тексту на природне мовлення",
"moderations": "Модерації",
"moderationsDesc": "Модерація контенту та класифікація безпеки",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"settingsApi": "Settings API",
"categoryCore": "Основні API",
"categoryMedia": "Медіа та мультимодальність",
"categoryUtility": "Утиліти та управління",
"enableCloudTitle": "Увімкнути Cloud Proxy",
"whatYouGet": "Що ви отримаєте",
"cloudBenefitAccess": "Отримайте доступ до свого API з будь-якої точки світу",
@@ -613,13 +733,154 @@
"image": "Зображення",
"custom": "звичай",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
"listModelsDesc": "List all available models across all connected providers",
"settingsApi": "Settings API",
"settingsApiDesc": "Read and modify OmniRoute configuration via API",
"categoryCore": "Основні API",
"categoryMedia": "Медіа та мультимодальність",
"categoryUtility": "Утиліти та управління"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Скидання автоматичних вимикачів.",
"processStatus": "Статус процесу",
"online": "Онлайн",
"offline": "Офлайн",
"pid": "PID",
"sessionUptime": "Час роботи сесії",
"lastHeartbeat": "Останній удар серця",
"activity24h": "Активність (24 години)",
"totalCalls": "Всього дзвінків",
"successRate": "Коефіцієнт успішності",
"avgLatency": "Середня затримка",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Здоров'я системи",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Оберіть готовий колір або створіть власну тему з одного кольору",
"themeCreate": "Створити тему",
"themeCustom": "Користувацька тема",
"themeCoral": "Кораловий",
"themeBlue": "Синій",
"themeRed": "Червоний",
"themeGreen": "Зелений",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Sticky Limit",
"stickyLimitDesc": "Дзвінки на обліковий запис перед переходом",
"modelAliases": "Псевдоніми моделі",
"modelAliasesTitle": "Псевдоніми моделей",
"modelAliasesDesc": "Шаблони шаблонів узагальнення для зміни назв моделей • Використовуйте * та ?",
"addCustomAlias": "Додати власний псевдонім",
"deprecatedModelId": "Застарілий ID моделі",
"newModelId": "Новий ID моделі",
"customAliases": "Власні псевдоніми",
"builtInAliases": "Вбудовані псевдоніми",
"backgroundDegradationTitle": "Деградація фонових завдань",
"backgroundDegradationDesc": "Автоматично виявляє фонові завдання (заголовки, резюме) і перенаправляє на дешевші моделі",
"enableDegradation": "Увімкнути деградацію фонових завдань",
"enableDegradationHint": "Коли увімкнено, фонові завдання, такі як генерація заголовків і підсумування, автоматично перенаправляються на дешевші моделі",
"tasksDetected": "Виявлено завдань",
"degradationMap": "Карта деградації моделей",
"premiumModel": "Преміум-модель",
"cheapModel": "Дешева модель",
"detectionPatterns": "Шаблони виявлення",
"newPattern": "напр. \"згенерувати заголовок\"",
"aliasPatternPlaceholder": "клод-сонет-*",
"aliasTargetPlaceholder": "claude-sonnet-4-20250514",
"pattern": "Візерунок",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Токени, що використовуються для створення записів кешу (резервний вихід до швидкості введення)",
"customPricingNote": "Ви можете змінити ціни за умовчанням для певних моделей. Спеціальні зміни мають пріоритет над автоматично визначеними цінами.",
"editPricing": "Редагувати ціни",
"viewFullDetails": "Переглянути повну інформацію",
"modelAliasesTitle": "Псевдоніми моделей",
"addCustomAlias": "Додати власний псевдонім",
"deprecatedModelId": "Застарілий ID моделі",
"newModelId": "Новий ID моделі",
"customAliases": "Власні псевдоніми",
"builtInAliases": "Вбудовані псевдоніми",
"backgroundDegradationTitle": "Деградація фонових завдань",
"backgroundDegradationDesc": "Автоматично виявляє фонові завдання (заголовки, резюме) і перенаправляє на дешевші моделі",
"enableDegradation": "Увімкнути деградацію фонових завдань",
"enableDegradationHint": "Коли увімкнено, фонові завдання, такі як генерація заголовків і підсумування, автоматично перенаправляються на дешевші моделі",
"tasksDetected": "Виявлено завдань",
"degradationMap": "Карта деградації моделей",
"premiumModel": "Преміум-модель",
"cheapModel": "Дешева модель",
"detectionPatterns": "Шаблони виявлення",
"newPattern": "напр. \"згенерувати заголовок\""
"viewFullDetails": "Переглянути повну інформацію"
},
"translator": {
"title": "Перекладач",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Провайдери",
"commonUseCases": "Загальні випадки використання",
"clientCompatibility": "Сумісність клієнта",
"protocolsToc": "Protocols",
"apiReference": "Довідник API",
"method": "метод",
"path": "шлях",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "використання",
"clientClaudeBullet1Middle": "(Клод) або",
"clientClaudeBullet1Suffix": "(Антигравітація) префікс.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Кінцева точка чату, сумісна з OpenAI (за замовчуванням).",
"endpointResponsesNote": "Кінцева точка API відповідей (Codex, o-series).",
"endpointModelsNote": "Каталог моделей для всіх підключених провайдерів.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute надається «як є» без будь-яких гарантій. Ми не несемо відповідальності за будь-які витрати, пов’язані з використанням API, перебоями в роботі служби або втратою даних. Завжди створюйте резервні копії вашої конфігурації.",
"termsSection6Title": "6. Відкритий код",
"termsSection6Text": "OmniRoute — це програмне забезпечення з відкритим кодом. Ви можете вільно перевіряти, змінювати та поширювати його відповідно до умов його ліцензії."
},
"media": {
"title": "Медіа-майданчик",
"subtitle": "Генеруйте зображення, відео та музику",
"model": "Model",
"prompt": "Prompt",
"generate": "Згенерувати",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "sức khỏe",
"limits": "Giới hạn & hạn ngạch",
"cliTools": "Công cụ CLI",
"media": "Phương tiện",
"settings": "Cài đặt",
"translator": "Người phiên dịch",
"docs": "Tài liệu",
"issues": "vấn đề",
"endpoint": "Điểm cuối",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "Trình quản lý API",
"logs": "Nhật ký",
"auditLog": "Nhật ký kiểm tra",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "Máy chủ proxy đã bị dừng hoặc đang khởi động lại.",
"expandSidebar": "Mở rộng thanh bên",
"collapseSidebar": "Thu gọn thanh bên",
"media": "Phương tiện"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "Đăng xuất",
@@ -108,10 +130,18 @@
"homeDescription": "Chào mừng đến với OmniRoute",
"endpoint": "Điểm cuối",
"endpointDescription": "Cấu hình điểm cuối API",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "Cài đặt",
"settingsDescription": "Quản lý tùy chọn của bạn",
"openaiCompatible": "Tương thích OpenAI",
"anthropicCompatible": "Tương thích với con người"
"anthropicCompatible": "Tương thích với con người",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "Bắt đầu nhanh",
@@ -261,6 +291,21 @@
"showing": "Hiển thị các mục {count} (bù đắp {offset})",
"previous": "trước đó"
},
"media": {
"title": "Sân chơi phương tiện",
"subtitle": "Tạo hình ảnh, video và âm nhạc",
"model": "Model",
"prompt": "Prompt",
"generate": "Tạo",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "Công cụ CLI",
"noActiveProviders": "Không có nhà cung cấp đang hoạt động",
@@ -533,7 +578,75 @@
"saving": "Đang lưu...",
"weighted": "Có trọng số",
"leastUsed": "Ít được sử dụng nhất",
"costOpt": "Lựa chọn chi phí"
"costOpt": "Lựa chọn chi phí",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "no-price",
"warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
"warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
"warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly."
},
"costs": {
"title": "Chi phí",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "Chuyển đổi văn bản thành giọng nói tự nhiên",
"moderations": "Kiểm duyệt",
"moderationsDesc": "Kiểm duyệt nội dung và phân loại an toàn",
"responsesDesc": "API Responses của OpenAI cho Codex và quy trình làm việc tác tử nâng cao",
"listModelsDesc": "Liệt kê tất cả các mô hình có sẵn từ tất cả các nhà cung cấp đã kết nối",
"settingsApiDesc": "Đọc và sửa đổi cấu hình OmniRoute qua API",
"settingsApi": "Settings API",
"categoryCore": "API Cốt Lõi",
"categoryMedia": "Phương Tiện & Đa Phương Thức",
"categoryUtility": "Tiện Ích & Quản Lý",
"enableCloudTitle": "Kích hoạt proxy đám mây",
"whatYouGet": "Những gì bạn sẽ nhận được",
"cloudBenefitAccess": "Truy cập API của bạn từ mọi nơi trên thế giới",
@@ -613,13 +733,154 @@
"image": "Hình ảnh",
"custom": "tùy chỉnh",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "API Responses của OpenAI cho Codex và quy trình làm việc tác tử nâng cao",
"listModelsDesc": "Liệt kê tất cả các mô hình có sẵn từ tất cả các nhà cung cấp đã kết nối",
"settingsApi": "Settings API",
"settingsApiDesc": "Đọc và sửa đổi cấu hình OmniRoute qua API",
"categoryCore": "API Cốt Lõi",
"categoryMedia": "Phương Tiện & Đa Phương Thức",
"categoryUtility": "Tiện Ích & Quản Lý"
"sectionTitle": "Integration Surface",
"sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
"tabApis": "OpenAI-compatible APIs",
"tabProtocols": "Protocols",
"tabsAria": "Endpoint sections",
"protocolsTitle": "Protocols",
"protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
"mcpCardTitle": "MCP Server",
"mcpCardDescription": "Model Context Protocol over stdio",
"a2aCardTitle": "A2A Server",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "Tình trạng hệ thống",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "Chọn màu đặt sẵn hoặc tạo chủ đề của riêng bạn bằng một màu",
"themeCreate": "Tạo chủ đề",
"themeCustom": "Chủ đề tùy chỉnh",
"themeCoral": "San hô",
"themeBlue": "Xanh dương",
"themeRed": "Đỏ",
"themeGreen": "Xanh lá",
@@ -1181,7 +1441,23 @@
"stickyLimit": "Giới hạn dính",
"stickyLimitDesc": "Cuộc gọi trên mỗi tài khoản trước khi chuyển đổi",
"modelAliases": "Bí danh mẫu",
"modelAliasesTitle": "Bí danh mô hình",
"modelAliasesDesc": "Các mẫu ký tự đại diện để ánh xạ lại tên mẫu máy • Sử dụng * và ?",
"addCustomAlias": "Thêm Bí Danh Tùy Chỉnh",
"deprecatedModelId": "ID mô hình ngừng sử dụng",
"newModelId": "ID mô hình mới",
"customAliases": "Bí Danh Tùy Chỉnh",
"builtInAliases": "Bí Danh Tích Hợp",
"backgroundDegradationTitle": "Giảm Cấp Tác Vụ Nền",
"backgroundDegradationDesc": "Tự động phát hiện tác vụ nền (tiêu đề, tóm tắt) và chuyển hướng sang mô hình rẻ hơn",
"enableDegradation": "Bật Giảm Cấp Nền",
"enableDegradationHint": "Khi bật, các tác vụ nền như tạo tiêu đề và tóm tắt sẽ tự động được chuyển hướng sang các mô hình rẻ hơn",
"tasksDetected": "Tác vụ được phát hiện",
"degradationMap": "Bản Đồ Giảm Cấp Mô Hình",
"premiumModel": "Mô hình cao cấp",
"cheapModel": "Mô hình giá rẻ",
"detectionPatterns": "Mẫu Phát Hiện",
"newPattern": "vd: \"tạo tiêu đề\"",
"aliasPatternPlaceholder": "Claude-sonnet-*",
"aliasTargetPlaceholder": "Claude-sonnet-4-20250514",
"pattern": "mẫu",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "Mã thông báo được sử dụng để tạo mục nhập bộ đệm (dự phòng tốc độ đầu vào)",
"customPricingNote": "Bạn có thể ghi đè giá mặc định cho các kiểu máy cụ thể. Ghi đè tùy chỉnh được ưu tiên hơn giá được tự động phát hiện.",
"editPricing": "Chỉnh sửa giá",
"viewFullDetails": "Xem chi tiết đầy đủ",
"modelAliasesTitle": "Bí danh mô hình",
"addCustomAlias": "Thêm Bí Danh Tùy Chỉnh",
"deprecatedModelId": "ID mô hình ngừng sử dụng",
"newModelId": "ID mô hình mới",
"customAliases": "Bí Danh Tùy Chỉnh",
"builtInAliases": "Bí Danh Tích Hợp",
"backgroundDegradationTitle": "Giảm Cấp Tác Vụ Nền",
"backgroundDegradationDesc": "Tự động phát hiện tác vụ nền (tiêu đề, tóm tắt) và chuyển hướng sang mô hình rẻ hơn",
"enableDegradation": "Bật Giảm Cấp Nền",
"enableDegradationHint": "Khi bật, các tác vụ nền như tạo tiêu đề và tóm tắt sẽ tự động được chuyển hướng sang các mô hình rẻ hơn",
"tasksDetected": "Tác vụ được phát hiện",
"degradationMap": "Bản Đồ Giảm Cấp Mô Hình",
"premiumModel": "Mô hình cao cấp",
"cheapModel": "Mô hình giá rẻ",
"detectionPatterns": "Mẫu Phát Hiện",
"newPattern": "vd: \"tạo tiêu đề\""
"viewFullDetails": "Xem chi tiết đầy đủ"
},
"translator": {
"title": "Người phiên dịch",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "Nhà cung cấp",
"commonUseCases": "Các trường hợp sử dụng phổ biến",
"clientCompatibility": "Khả năng tương thích của khách hàng",
"protocolsToc": "Protocols",
"apiReference": "Tham chiếu API",
"method": "phương pháp",
"path": "Đường dẫn",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "sử dụng",
"clientClaudeBullet1Middle": "(Claude) hoặc",
"clientClaudeBullet1Suffix": "(Phản trọng lực) tiền tố.",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Sử dụng MCP qua stdio để cho phép khách hàng khám phá và gọi các công cụ OmniRoute với khả năng hiển thị kiểm tra.",
"protocolMcpStep1": "Bắt đầu vận chuyển MCP với `omniroute --mcp`.",
"protocolMcpStep2": "Trỏ máy khách MCP của bạn tới dịch vụ vận chuyển stdio.",
"protocolMcpStep3": "Gọi `omniroute_get_health` và `omniroute_list_combos` để xác thực kết nối.",
"protocolA2aTitle": "A2A (Đại lý2Agent)",
"protocolA2aDesc": "Sử dụng A2A JSON-RPC để gửi tác vụ một cách đồng bộ hoặc thông qua truyền phát SSE.",
"protocolA2aStep1": "Đọc `/.well-known/agent.json` để khám phá tác nhân.",
"protocolA2aStep2": "Gửi yêu cầu `message/send` hoặc `message/stream` tới `POST /a2a`.",
"protocolA2aStep3": "Quản lý vòng đời tác vụ với `tasks/get` và `tasks/cancel`.",
"protocolTroubleshootingTitle": "Khắc phục sự cố giao thức",
"protocolTroubleshooting1": "Nếu trạng thái MCP ngoại tuyến, hãy xác minh quy trình stdio đang chạy và tệp nhịp tim đang cập nhật.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "Điểm cuối trò chuyện tương thích với OpenAI (mặc định).",
"endpointResponsesNote": "Điểm cuối API phản hồi (Codex, o-series).",
"endpointModelsNote": "Danh mục mô hình cho tất cả các nhà cung cấp được kết nối.",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute được cung cấp \"nguyên trạng\" mà không có bất kỳ hình thức bảo hành nào. Chúng tôi không chịu trách nhiệm về bất kỳ chi phí nào phát sinh do sử dụng API, gián đoạn dịch vụ hoặc mất dữ liệu. Luôn duy trì bản sao lưu cấu hình của bạn.",
"termsSection6Title": "6. Nguồn mở",
"termsSection6Text": "OmniRoute là phần mềm mã nguồn mở. Bạn có thể tự do kiểm tra, sửa đổi và phân phối nó theo các điều khoản trong giấy phép."
},
"media": {
"title": "Sân chơi phương tiện",
"subtitle": "Tạo hình ảnh, video và âm nhạc",
"model": "Model",
"prompt": "Prompt",
"generate": "Tạo",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}

View File

@@ -69,11 +69,14 @@
"health": "健康",
"limits": "限制和配额",
"cliTools": "CLI工具",
"media": "媒体",
"settings": "设置",
"translator": "翻译者",
"docs": "文档",
"issues": "问题",
"endpoint": "端点",
"mcp": "MCP",
"a2a": "A2A",
"apiManager": "API管理器",
"logs": "日志",
"auditLog": "审核日志",
@@ -89,7 +92,26 @@
"serverDisconnectedMsg": "代理服务器已停止或正在重新启动。",
"expandSidebar": "展开侧边栏",
"collapseSidebar": "折叠侧边栏",
"media": "媒体"
"themes": "Themes",
"presetColors": "Popular colors",
"createTheme": "Create theme",
"chooseColor": "Pick one color",
"themeCoral": "Coral",
"themeBlue": "Blue",
"themeRed": "Red",
"themeGreen": "Green",
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan"
},
"themesPage": {
"title": "Themes",
"description": "Choose a preset theme or create your own with a single color",
"presetColors": "Popular colors",
"customTheme": "Custom theme",
"customThemeDesc": "Click create theme and pick one color",
"createTheme": "Create theme",
"activePreset": "Active theme"
},
"header": {
"logout": "退出",
@@ -108,10 +130,18 @@
"homeDescription": "欢迎来到 OmniRoute",
"endpoint": "端点",
"endpointDescription": "API端点配置",
"mcp": "MCP Management",
"mcpDescription": "Monitor MCP server process, tools, and operational controls",
"a2a": "A2A Management",
"a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity",
"settings": "设置",
"settingsDescription": "管理您的偏好",
"openaiCompatible": "兼容 OpenAI",
"anthropicCompatible": "人择兼容"
"anthropicCompatible": "人择兼容",
"media": "Media",
"mediaDescription": "Generate images, videos, and music",
"themes": "Themes",
"themesDescription": "Choose a color theme for the whole dashboard panel"
},
"home": {
"quickStart": "快速入门",
@@ -261,6 +291,21 @@
"showing": "显示 {count} 条目(偏移量 {offset}",
"previous": "上一页"
},
"media": {
"title": "媒体工作台",
"subtitle": "生成图像、视频和音乐",
"model": "Model",
"prompt": "Prompt",
"generate": "生成",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
},
"cliTools": {
"title": "CLI工具",
"noActiveProviders": "没有活跃的提供商",
@@ -533,7 +578,75 @@
"saving": "正在保存...",
"weighted": "加权",
"leastUsed": "最少使用的",
"costOpt": "成本选择"
"costOpt": "成本选择",
"strategyGuideTitle": "How to use this strategy",
"strategyGuideWhen": "When to use",
"strategyGuideAvoid": "Avoid when",
"strategyGuideExample": "Example",
"strategyGuide": {
"priority": {
"when": "You have one preferred model and only want fallback on failure.",
"avoid": "You need request distribution across models.",
"example": "Primary coding model with cheaper backup for outages."
},
"weighted": {
"when": "You need controlled traffic split across models.",
"avoid": "You cannot maintain accurate weights over time.",
"example": "80% stable model + 20% canary model rollout."
},
"round-robin": {
"when": "You want predictable and even distribution.",
"avoid": "Models differ too much in latency or cost.",
"example": "Same model on multiple accounts to spread throughput."
},
"random": {
"when": "You want simple distribution with minimal setup.",
"avoid": "You need strict traffic guarantees.",
"example": "Quick prototyping with equivalent models."
},
"least-used": {
"when": "You want adaptive balancing based on live demand.",
"avoid": "Traffic is too low to benefit from usage balancing.",
"example": "Mixed workloads where one model often gets overloaded."
},
"cost-optimized": {
"when": "Cost reduction is your top priority.",
"avoid": "Pricing data is missing or outdated.",
"example": "Background or batch jobs where lower cost is preferred."
}
},
"advancedHelp": {
"maxRetries": "How many retries are attempted before failing a request.",
"retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
"timeout": "Maximum request duration before aborting.",
"healthcheck": "Skips unhealthy models/providers from routing decisions.",
"concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
"queueTimeout": "How long a request can wait in queue before timing out."
},
"templatesTitle": "Quick templates",
"templatesDescription": "Apply a starting profile, then adjust models and config.",
"templateApply": "Apply template",
"templateHighAvailability": "High availability",
"templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
"templateCostSaver": "Cost saver",
"templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
"templateBalanced": "Balanced load",
"templateBalancedDesc": "Least-used routing to spread demand over time.",
"usageGuideHide": "Hide",
"usageGuideDontShowAgain": "Don't show again",
"usageGuideShow": "Show guide",
"quickTestTitle": "Combo ready to validate",
"quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
"testNow": "Test now",
"pricingCoverage": "Pricing coverage",
"pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
"pricingAvailable": "Pricing available",
"pricingMissing": "No pricing",
"pricingAvailableShort": "priced",
"pricingMissingShort": "无价格",
"warningRoundRobinSingleModel": "循环法对于至少 2 个模型最有用。",
"warningCostOptimizedPartialPricing": "只有{priced} 和{total} 型号有定价。路由可能是部分成本感知的。",
"warningCostOptimizedNoPricing": "没有找到该组合的定价数据。成本优化的路线可能会出乎意料。"
},
"costs": {
"title": "成本",
@@ -574,6 +687,13 @@
"textToSpeechDesc": "将文本转换为听起来自然的语音",
"moderations": "节制",
"moderationsDesc": "内容审核和安全分级",
"responsesDesc": "用于 Codex 和高级智能体工作流的 OpenAI Responses API",
"listModelsDesc": "列出所有已连接提供商的所有可用模型",
"settingsApiDesc": "通过 API 读取和修改 OmniRoute 配置",
"settingsApi": "Settings API",
"categoryCore": "核心 API",
"categoryMedia": "媒体和多模态",
"categoryUtility": "实用工具和管理",
"enableCloudTitle": "启用云代理",
"whatYouGet": "你会得到什么",
"cloudBenefitAccess": "从世界任何地方访问您的 API",
@@ -613,13 +733,154 @@
"image": "图片",
"custom": "定制",
"modelsCount": "{count, plural, one {# model} other {# models}}",
"responsesDesc": "用于 Codex 和高级智能体工作流的 OpenAI Responses API",
"listModelsDesc": "列出所有已连接提供商的所有可用模型",
"settingsApi": "Settings API",
"settingsApiDesc": "通过 API 读取和修改 OmniRoute 配置",
"categoryCore": "核心 API",
"categoryMedia": "媒体和多模态",
"categoryUtility": "实用工具和管理"
"sectionTitle": "积分面",
"sectionDescription": "OpenAI 兼容的 API 和操作协议端点",
"tabApis": "兼容 OpenAI 的 API",
"tabProtocols": "协议",
"tabsAria": "端点部分",
"protocolsTitle": "协议",
"protocolsDescription": "MCP 和 A2A 是具有专用可观察性和控制功能的一流端点。",
"mcpCardTitle": "MCP服务器",
"mcpCardDescription": "基于 stdio 的模型上下文协议",
"a2aCardTitle": "A2A服务器",
"a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
"protocolToolsLabel": "Tools",
"protocolTasksLabel": "Tasks",
"protocolActiveStreamsLabel": "Active streams",
"protocolLastActivity": "Last activity",
"quickStart": "Quick Start",
"openMcpDashboard": "Open MCP management",
"openA2aDashboard": "Open A2A management",
"mcpQuickStartTitle": "MCP Quick Start",
"mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
"mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
"mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
"a2aQuickStartTitle": "A2A Quick Start",
"a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
"a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
"a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`."
},
"mcpDashboard": {
"loading": "Loading MCP dashboard...",
"activate": "activate",
"deactivate": "deactivate",
"confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
"switchComboFailed": "Failed to switch combo state.",
"switchComboSuccess": "Combo \"{combo}\" updated.",
"confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
"applyProfileFailed": "Failed to apply resilience profile.",
"applyProfileSuccess": "Profile \"{profile}\" applied.",
"confirmResetBreakers": "Reset all circuit breakers?",
"resetBreakersFailed": "Failed to reset circuit breakers.",
"resetBreakersSuccess": "Circuit breakers reset.",
"processStatus": "Process status",
"online": "Online",
"offline": "Offline",
"pid": "PID",
"sessionUptime": "Session uptime",
"lastHeartbeat": "Last heartbeat",
"activity24h": "Activity (24h)",
"totalCalls": "Total calls",
"successRate": "Success rate",
"avgLatency": "Avg latency",
"topTools": "Top tools",
"noToolCalls24h": "No tool calls in the last 24 hours.",
"runtimeDetails": "Runtime details",
"transport": "Transport",
"scopesEnforced": "Scopes enforced",
"yes": "yes",
"no": "no",
"lastCall": "Last call",
"heartbeatPath": "Heartbeat path",
"operationalControls": "Operational controls",
"switchCombo": "Switch combo",
"inactive": "inactive",
"active": "active",
"activateCombo": "Activate combo",
"deactivateCombo": "Deactivate combo",
"applyResilienceProfile": "Apply resilience profile",
"profileAggressive": "aggressive",
"profileBalanced": "balanced",
"profileConservative": "conservative",
"applyProfile": "Apply profile",
"resetCircuitBreakers": "Reset circuit breakers",
"resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
"resetAllBreakers": "Reset all breakers",
"toolsAndScopes": "Tools and scopes",
"tableTool": "Tool",
"tableScopes": "Scopes",
"tablePhase": "Phase",
"tableAudit": "Audit",
"auditLog": "Audit log",
"auditSummary": "Calls: {total} | page {page} of {totalPages}",
"allTools": "All tools",
"allResults": "All results",
"success": "Success",
"failure": "Failure",
"apiKeyIdPlaceholder": "apiKeyId",
"loadingAuditEntries": "Loading audit entries...",
"noAuditEntriesForFilters": "No audit entries found for current filters.",
"tableTimestamp": "Timestamp",
"tableDuration": "Duration",
"tableResult": "Result",
"tableApiKey": "API key",
"failed": "failed",
"previous": "Previous",
"next": "Next"
},
"a2aDashboard": {
"loading": "Loading A2A dashboard...",
"confirmCancelTask": "Cancel task {taskId}?",
"cancelTaskFailed": "Failed to cancel task.",
"cancelTaskSuccess": "Task {taskId} cancelled.",
"smokeSendFailed": "message/send smoke test failed.",
"smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
"smokeSendSuccess": "message/send ok.",
"smokeStreamFailed": "message/stream smoke test failed.",
"smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
"smokeStreamNoTaskId": "message/stream finished without task id.",
"health": "Health",
"ok": "ok",
"totalTasks": "Total tasks",
"activeStreams": "Active streams",
"lastTask": "Last task",
"taskStateOverview": "Task state overview",
"state": {
"submitted": "submitted",
"working": "working",
"completed": "completed",
"failed": "failed",
"cancelled": "cancelled"
},
"agentCard": "Agent card",
"version": "Version",
"url": "URL",
"capabilities": "Capabilities",
"agentCardNotAvailable": "Agent card not available.",
"quickValidation": "Quick validation",
"quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
"runMessageSend": "Run message/send",
"runMessageStream": "Run message/stream",
"taskManagement": "Task management",
"taskSummary": "{total} tasks | page {page} of {totalPages}",
"allStates": "all",
"allSkills": "all skills",
"loadingTasks": "Loading tasks...",
"noTasksForFilters": "No tasks found for current filters.",
"tableTask": "Task",
"tableSkill": "Skill",
"tableState": "State",
"tableUpdated": "Updated",
"tableActions": "Actions",
"view": "View",
"cancel": "Cancel",
"previous": "Previous",
"next": "Next",
"taskDetail": "Task detail",
"close": "Close",
"metadata": "Metadata",
"events": "Events",
"artifacts": "Artifacts"
},
"health": {
"title": "系统健康状况",
@@ -1100,7 +1361,6 @@
"themeAccentDesc": "选择预设颜色,或使用单一颜色创建你自己的主题",
"themeCreate": "创建主题",
"themeCustom": "自定义主题",
"themeCoral": "珊瑚色",
"themeBlue": "蓝色",
"themeRed": "红色",
"themeGreen": "绿色",
@@ -1181,7 +1441,23 @@
"stickyLimit": "粘性限制",
"stickyLimitDesc": "切换前每个账户的通话次数",
"modelAliases": "模型别名",
"modelAliasesTitle": "模型别名",
"modelAliasesDesc": "重新映射模型名称的通配符模式 • 使用 * 和 ?",
"addCustomAlias": "添加自定义别名",
"deprecatedModelId": "已弃用的模型 ID",
"newModelId": "新模型 ID",
"customAliases": "自定义别名",
"builtInAliases": "内置别名",
"backgroundDegradationTitle": "后台任务降级",
"backgroundDegradationDesc": "自动检测后台任务(标题、摘要)并路由到更便宜的模型",
"enableDegradation": "启用后台任务降级",
"enableDegradationHint": "启用后,标题生成和摘要等后台任务会自动路由到更便宜的模型",
"tasksDetected": "检测到的任务",
"degradationMap": "模型降级映射",
"premiumModel": "高级模型",
"cheapModel": "低成本模型",
"detectionPatterns": "检测模式",
"newPattern": "例如:\"生成标题\"",
"aliasPatternPlaceholder": "克劳德十四行诗-*",
"aliasTargetPlaceholder": "克劳德十四行诗-4-20250514",
"pattern": "图案",
@@ -1399,23 +1675,7 @@
"cacheCreationTokenDesc": "用于创建缓存条目的令牌(回退到输入速率)",
"customPricingNote": "您可以覆盖特定型号的默认定价。自定义覆盖优先于自动检测的定价。",
"editPricing": "编辑定价",
"viewFullDetails": "查看完整详情",
"modelAliasesTitle": "模型别名",
"addCustomAlias": "添加自定义别名",
"deprecatedModelId": "已弃用的模型 ID",
"newModelId": "新模型 ID",
"customAliases": "自定义别名",
"builtInAliases": "内置别名",
"backgroundDegradationTitle": "后台任务降级",
"backgroundDegradationDesc": "自动检测后台任务(标题、摘要)并路由到更便宜的模型",
"enableDegradation": "启用后台任务降级",
"enableDegradationHint": "启用后,标题生成和摘要等后台任务会自动路由到更便宜的模型",
"tasksDetected": "检测到的任务",
"degradationMap": "模型降级映射",
"premiumModel": "高级模型",
"cheapModel": "低成本模型",
"detectionPatterns": "检测模式",
"newPattern": "例如:\"生成标题\""
"viewFullDetails": "查看完整详情"
},
"translator": {
"title": "翻译者",
@@ -1921,6 +2181,7 @@
"supportedProvidersToc": "供应商",
"commonUseCases": "常见用例",
"clientCompatibility": "客户端兼容性",
"protocolsToc": "协议",
"apiReference": "API参考",
"method": "方法",
"path": "路径",
@@ -1993,6 +2254,22 @@
"clientClaudeBullet1Prefix": "使用",
"clientClaudeBullet1Middle": "(克劳德)或",
"clientClaudeBullet1Suffix": "(反重力)前缀。",
"protocolsTitle": "Protocols: MCP & A2A",
"protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
"protocolMcpTitle": "MCP (Model Context Protocol)",
"protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
"protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
"protocolMcpStep2": "Point your MCP client to stdio transport.",
"protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
"protocolA2aTitle": "A2A (Agent2Agent)",
"protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
"protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
"protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
"protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
"protocolTroubleshootingTitle": "Protocol Troubleshooting",
"protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
"protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
"protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
"endpointChatNote": "与 OpenAI 兼容的聊天端点(默认)。",
"endpointResponsesNote": "响应 API 端点Codex、o 系列)。",
"endpointModelsNote": "所有连接的提供商的模型目录。",
@@ -2071,20 +2348,5 @@
"termsSection5Text": "OmniRoute 按“原样”提供,不提供任何形式的保证。我们不对因 API 使用、服务中断或数据丢失而产生的任何费用负责。始终维护配置的备份。",
"termsSection6Title": "6. 开源",
"termsSection6Text": "OmniRoute 是开源软件。您可以根据其许可条款自由检查、修改和分发它。"
},
"media": {
"title": "媒体工作台",
"subtitle": "生成图像、视频和音乐",
"model": "Model",
"prompt": "Prompt",
"generate": "生成",
"generating": "Generating...",
"loadingModels": "Loading available models...",
"noModels": "No models available. Configure providers with media capabilities first.",
"error": "Generation Failed",
"result": "Result",
"imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
"videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
"musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
}
}