- OpenAI-compatible gateway with intelligent routing via cortiq-router (allaigate) - Embedded build-free admin SPA at /admin: 7 languages (en/ru/de/fr/es/zh/tr), light/dark themes, hot config reload (no restart) - Admin API, per-request statistics + Prometheus /metrics, secret store, playground - English documentation (primary) with Russian translations (*.ru.md)
258 lines
9.7 KiB
JavaScript
Vendored
258 lines
9.7 KiB
JavaScript
Vendored
// English — source of truth. Other languages override per key; missing keys fall
|
|
// back to English. Keep keys identical across all language files.
|
|
export default {
|
|
// brand / common
|
|
"brand.sub": "Gateway",
|
|
"common.loading": "Loading…",
|
|
"common.save": "Save",
|
|
"common.saving": "Saving…",
|
|
"common.cancel": "Cancel",
|
|
"common.add": "Add",
|
|
"common.edit": "Edit",
|
|
"common.delete": "Delete",
|
|
"common.close": "Close",
|
|
"common.test": "Test",
|
|
"common.copy": "Copy",
|
|
"common.copied": "Copied",
|
|
"common.confirm": "Confirm",
|
|
"common.none": "none",
|
|
"common.saved": "Saved",
|
|
"common.error": "Error",
|
|
"common.ok": "OK",
|
|
"common.refresh": "Refresh",
|
|
"common.actions": "Actions",
|
|
"common.optional": "optional",
|
|
"common.search": "Search",
|
|
"common.all": "all",
|
|
|
|
// nav
|
|
"nav.dashboard": "Dashboard",
|
|
"nav.models": "Models",
|
|
"nav.routing": "Routing",
|
|
"nav.protocols": "Protocols",
|
|
"nav.keys": "API keys",
|
|
"nav.playground": "Playground",
|
|
"nav.settings": "Settings",
|
|
"nav.foot": "Gateway · v{v}",
|
|
|
|
// topbar / status
|
|
"status.router": "Router",
|
|
"status.gateway": "Gateway",
|
|
"status.online": "online",
|
|
"status.offline": "offline",
|
|
"status.checking": "checking…",
|
|
"theme.toggle": "Theme",
|
|
"logout": "Log out",
|
|
|
|
// login
|
|
"login.title": "allaigate Gateway",
|
|
"login.subtitle": "Enter the admin token to manage this gateway.",
|
|
"login.token": "Admin token",
|
|
"login.tokenPlaceholder": "paste admin token",
|
|
"login.submit": "Open console",
|
|
"login.hint": "The token is printed in the gateway log on startup, or set via [admin].token_env.",
|
|
"login.failed": "Invalid admin token.",
|
|
|
|
// dashboard
|
|
"dash.title": "Dashboard",
|
|
"dash.subtitle": "Live traffic, cost and routing analytics for your model pool.",
|
|
"dash.range": "Range",
|
|
"dash.range.1h": "1h",
|
|
"dash.range.24h": "24h",
|
|
"dash.range.7d": "7d",
|
|
"dash.kpi.requests": "Requests",
|
|
"dash.kpi.tokens": "Tokens",
|
|
"dash.kpi.cost": "Cost",
|
|
"dash.kpi.latency": "Avg latency",
|
|
"dash.kpi.success": "Success rate",
|
|
"dash.kpi.failovers": "Failovers",
|
|
"dash.series.title": "Requests over time",
|
|
"dash.series.cost": "Cost over time",
|
|
"dash.series.empty": "No traffic yet in this range.",
|
|
"dash.breakdown.title": "Breakdown",
|
|
"dash.groupby.model": "by model",
|
|
"dash.groupby.tier": "by tier",
|
|
"dash.groupby.label": "by task",
|
|
"dash.groupby.account": "by account",
|
|
"dash.recent.title": "Recent requests",
|
|
"dash.recent.empty": "No requests recorded yet. Try the Playground.",
|
|
"dash.col.time": "Time",
|
|
"dash.col.model": "Model",
|
|
"dash.col.tier": "Tier",
|
|
"dash.col.task": "Task",
|
|
"dash.col.tokens": "Tokens",
|
|
"dash.col.cost": "Cost",
|
|
"dash.col.latency": "Latency",
|
|
"dash.col.outcome": "Outcome",
|
|
"dash.col.requests": "Requests",
|
|
"dash.col.errors": "Errors",
|
|
"dash.health.title": "Health",
|
|
"dash.health.reachable": "reachable",
|
|
"dash.health.unreachable": "unreachable",
|
|
|
|
// models
|
|
"models.title": "Models",
|
|
"models.subtitle": "Your model pool — mix cheap local models with cloud APIs.",
|
|
"models.add": "Add model",
|
|
"models.empty": "No models yet. Add your first model to get started.",
|
|
"models.col.id": "ID",
|
|
"models.col.provider": "Provider",
|
|
"models.col.model": "Model",
|
|
"models.col.tier": "Cost tier",
|
|
"models.col.key": "Key",
|
|
"models.col.caps": "Capabilities",
|
|
"models.col.price": "Price (in/out)",
|
|
"models.probe": "Probe",
|
|
"models.probe.ok": "Reachable ({ms} ms)",
|
|
"models.probe.fail": "Failed: {err}",
|
|
"models.form.addTitle": "Add model",
|
|
"models.form.editTitle": "Edit model",
|
|
"models.form.id": "ID",
|
|
"models.form.idHint": "Unique id used in routing, e.g. local-qwen",
|
|
"models.form.provider": "Provider",
|
|
"models.form.baseUrl": "Base URL",
|
|
"models.form.model": "Model name",
|
|
"models.form.kind": "Kind",
|
|
"models.form.costTier": "Cost tier",
|
|
"models.form.priceIn": "Price in ($/1M)",
|
|
"models.form.priceOut": "Price out ($/1M)",
|
|
"models.form.apiKeyEnv": "API key env name",
|
|
"models.form.apiKeyEnvHint": "Name of the env var / stored secret holding this provider's key.",
|
|
"models.form.caps": "Capabilities",
|
|
"models.form.secret": "Secret value",
|
|
"models.form.secretStored": "stored",
|
|
"models.form.secretEnv": "from env",
|
|
"models.form.secretMissing": "not set",
|
|
"models.form.secretPlaceholder": "set or replace key (write-only)",
|
|
"models.deleteConfirm": "Delete model \"{id}\"?",
|
|
|
|
// routing
|
|
"routing.title": "Routing",
|
|
"routing.subtitle": "Map complexity tiers to an ordered list of models (priority = fallback).",
|
|
"routing.default": "Default model",
|
|
"routing.defaultHint": "Used when the router is unreachable.",
|
|
"routing.tiers": "Tiers",
|
|
"routing.tierHint": "Drag chips to reorder; first is preferred, the rest are fallbacks.",
|
|
"routing.addModel": "+ add",
|
|
"routing.addTier": "Add tier",
|
|
"routing.tierName": "Tier name",
|
|
"routing.policy": "Policy",
|
|
"routing.policy.mode": "Mode",
|
|
"routing.policy.fixed": "Fixed table",
|
|
"routing.policy.costAware": "Cost-aware",
|
|
"routing.policy.maxCost": "Max cost per request ($)",
|
|
"routing.policy.minClass": "Minimum class per tier",
|
|
"routing.empty": "No models available — add models first.",
|
|
|
|
// protocols
|
|
"protocols.title": "Protocols",
|
|
"protocols.subtitle": "Enable only the inbound API surfaces you need. Toggles apply live.",
|
|
"protocols.implemented": "implemented",
|
|
"protocols.planned": "planned",
|
|
"protocols.openai_chat": "OpenAI Chat Completions",
|
|
"protocols.openai_chat.d": "POST /v1/chat/completions — works with OpenAI SDK, LangChain, crewAI.",
|
|
"protocols.openai_completions": "OpenAI Completions (legacy)",
|
|
"protocols.openai_completions.d": "POST /v1/completions — legacy integrations.",
|
|
"protocols.openai_embeddings": "OpenAI Embeddings",
|
|
"protocols.openai_embeddings.d": "POST /v1/embeddings — RAG pipelines.",
|
|
"protocols.openai_models": "OpenAI Models",
|
|
"protocols.openai_models.d": "GET /v1/models — client auto-discovery.",
|
|
"protocols.anthropic_messages": "Anthropic Messages",
|
|
"protocols.anthropic_messages.d": "POST /v1/messages — Claude-native agents.",
|
|
"protocols.mcp": "MCP (Model Context Protocol)",
|
|
"protocols.mcp.d": "JSON-RPC / SSE — MCP-native orchestrators.",
|
|
"protocols.native_passthrough": "Native passthrough",
|
|
"protocols.native_passthrough.d": "POST /route — direct access to the routing decision.",
|
|
|
|
// keys
|
|
"keys.title": "API keys",
|
|
"keys.subtitle": "Virtual gateway keys for your agents. Provider keys never leave the gateway.",
|
|
"keys.add": "New key",
|
|
"keys.empty": "No keys configured — the gateway is in open mode (no auth).",
|
|
"keys.openMode": "Open mode: any request is accepted (no key required).",
|
|
"keys.col.key": "Key",
|
|
"keys.col.account": "Account",
|
|
"keys.col.rate": "Rate / min",
|
|
"keys.col.models": "Allowed models",
|
|
"keys.form.title": "New API key",
|
|
"keys.form.account": "Account",
|
|
"keys.form.rate": "Rate limit / min",
|
|
"keys.form.allow": "Allowed models",
|
|
"keys.form.allowHint": "Leave empty to allow all models.",
|
|
"keys.form.custom": "Custom key (optional)",
|
|
"keys.form.customHint": "Leave empty to auto-generate sk-gw-…",
|
|
"keys.created": "Key created — copy it now, it won't be shown again:",
|
|
"keys.revoke": "Revoke",
|
|
"keys.revokeConfirm": "Revoke this key?",
|
|
"keys.allowAll": "all",
|
|
|
|
// playground
|
|
"pg.title": "Playground",
|
|
"pg.subtitle": "Send a prompt through the live pipeline and inspect the routing decision.",
|
|
"pg.system": "System prompt",
|
|
"pg.systemPlaceholder": "optional system message",
|
|
"pg.prompt": "Prompt",
|
|
"pg.promptPlaceholder": "Ask something…",
|
|
"pg.mode": "Mode",
|
|
"pg.mode.auto": "Auto (route)",
|
|
"pg.mode.pinned": "Pinned model",
|
|
"pg.profile": "Profile",
|
|
"pg.model": "Model",
|
|
"pg.temp": "Temperature",
|
|
"pg.maxTokens": "Max tokens",
|
|
"pg.send": "Send",
|
|
"pg.sending": "Sending…",
|
|
"pg.answer": "Answer",
|
|
"pg.empty": "The answer and routing decision will appear here.",
|
|
"pg.decision": "Routing decision",
|
|
"pg.task": "Task",
|
|
"pg.tier": "Tier",
|
|
"pg.score": "Complexity",
|
|
"pg.selected": "Selected model",
|
|
"pg.source": "Route source",
|
|
"pg.cost": "Cost",
|
|
"pg.latency": "Latency",
|
|
"pg.tokens": "Tokens (in/out)",
|
|
"pg.failover": "Failover",
|
|
"pg.error": "Request failed",
|
|
|
|
// settings
|
|
"settings.title": "Settings",
|
|
"settings.subtitle": "Gateway connection, routing input, reliability and observability.",
|
|
"settings.router": "Router connection",
|
|
"settings.router.url": "Router URL",
|
|
"settings.router.keyEnv": "Router key env name",
|
|
"settings.router.timeout": "Timeout (ms)",
|
|
"settings.router.verifyTls": "Verify TLS certificate",
|
|
"settings.router.taxonomy": "Taxonomy id",
|
|
"settings.route": "Routing input",
|
|
"settings.route.strategy": "Text strategy",
|
|
"settings.route.maxChars": "Max chars",
|
|
"settings.route.cacheTtl": "Cache TTL",
|
|
"settings.route.profile": "Default profile",
|
|
"settings.breaker": "Circuit breaker",
|
|
"settings.breaker.threshold": "Error threshold",
|
|
"settings.breaker.cooldown": "Cooldown",
|
|
"settings.log": "Logging",
|
|
"settings.log.level": "Log level",
|
|
"settings.log.bodies": "Log message bodies (privacy off)",
|
|
"settings.telemetry": "Telemetry",
|
|
"settings.telemetry.metrics": "Expose Prometheus /metrics",
|
|
"settings.cortiq": "Response metadata",
|
|
"settings.cortiq.echo": "Echo cortiq routing block in responses",
|
|
"settings.stats": "Statistics",
|
|
"settings.stats.enabled": "Record request statistics",
|
|
"settings.stats.file": "Stats file (JSONL)",
|
|
"settings.stats.retention": "Retention",
|
|
"settings.listen": "Listen address",
|
|
"settings.export": "Export config",
|
|
"settings.import": "Import config",
|
|
"settings.needsRestart": "Saved. Some changes (listen address) require a restart.",
|
|
|
|
// toasts / misc
|
|
"toast.saved": "Changes saved",
|
|
"toast.deleted": "Deleted",
|
|
"toast.probing": "Probing…",
|
|
"toast.imported": "Config imported",
|
|
};
|