// Deutsch — German translation for allaigate admin console. export default { // brand / common "brand.sub": "Gateway", "common.loading": "Laden…", "common.save": "Speichern", "common.saving": "Wird gespeichert…", "common.cancel": "Abbrechen", "common.add": "Hinzufügen", "common.edit": "Bearbeiten", "common.delete": "Löschen", "common.close": "Schließen", "common.test": "Testen", "common.copy": "Kopieren", "common.copied": "Kopiert", "common.confirm": "Bestätigen", "common.none": "keine", "common.saved": "Gespeichert", "common.error": "Fehler", "common.ok": "OK", "common.refresh": "Aktualisieren", "common.actions": "Aktionen", "common.optional": "optional", "common.search": "Suchen", "common.all": "alle", // nav "nav.dashboard": "Dashboard", "nav.models": "Modelle", "nav.routing": "Routing", "nav.protocols": "Protokolle", "nav.keys": "API-Schlüssel", "nav.playground": "Testbereich", "nav.settings": "Einstellungen", "nav.foot": "Gateway · v{v}", "nav.billing": "Router-Key & Abrechnung", // topbar / status "status.router": "Router", "status.gateway": "Gateway", "status.online": "online", "status.offline": "offline", "status.checking": "Prüfe…", "status.noKey": "kein Key", "theme.toggle": "Design", "logout": "Abmelden", // login "login.title": "allaigate Gateway", "login.subtitle": "Admin-Token eingeben, um dieses Gateway zu verwalten.", "login.token": "Admin-Token", "login.tokenPlaceholder": "Admin-Token einfügen", "login.submit": "Konsole öffnen", "login.hint": "Das Token wird beim Start im Gateway-Log ausgegeben oder über [admin].token_env gesetzt.", "login.failed": "Ungültiger Admin-Token.", // dashboard "dash.title": "Dashboard", "dash.subtitle": "Live-Traffic, Kosten und Routing-Analyse für Ihren Modell-Pool.", "dash.range": "Zeitraum", "dash.range.1h": "1h", "dash.range.24h": "24h", "dash.range.7d": "7d", "dash.kpi.requests": "Anfragen", "dash.kpi.tokens": "Tokens", "dash.kpi.cost": "Kosten", "dash.kpi.latency": "Ø Latenz", "dash.kpi.success": "Erfolgsrate", "dash.kpi.failovers": "Failovers", "dash.series.title": "Anfragen im Zeitverlauf", "dash.series.cost": "Kosten im Zeitverlauf", "dash.series.empty": "Kein Traffic in diesem Zeitraum.", "dash.breakdown.title": "Aufschlüsselung", "dash.groupby.model": "nach Modell", "dash.groupby.tier": "nach Tier", "dash.groupby.label": "nach Aufgabe", "dash.groupby.account": "nach Account", "dash.recent.title": "Letzte Anfragen", "dash.recent.empty": "Noch keine Anfragen aufgezeichnet. Testbereich ausprobieren.", "dash.col.time": "Zeit", "dash.col.model": "Modell", "dash.col.tier": "Tier", "dash.col.task": "Aufgabe", "dash.col.tokens": "Tokens", "dash.col.cost": "Kosten", "dash.col.latency": "Latenz", "dash.col.outcome": "Ergebnis", "dash.col.requests": "Anfragen", "dash.col.errors": "Fehler", "dash.health.title": "Status", "dash.health.reachable": "erreichbar", "dash.health.unreachable": "nicht erreichbar", "dash.health.getKey": "Router-Key holen", // models "models.title": "Modelle", "models.subtitle": "Ihr Modell-Pool — lokale Modelle und Cloud-APIs kombinieren.", "models.add": "Modell hinzufügen", "models.empty": "Noch keine Modelle. Erstes Modell hinzufügen.", "models.col.id": "ID", "models.col.provider": "Anbieter", "models.col.model": "Modell", "models.col.tier": "Kostenstufe", "models.col.key": "Schlüssel", "models.col.caps": "Fähigkeiten", "models.col.price": "Preis (ein/aus)", "models.probe": "Prüfen", "models.probe.ok": "Erreichbar ({ms} ms)", "models.probe.fail": "Fehlgeschlagen: {err}", "models.form.addTitle": "Modell hinzufügen", "models.form.editTitle": "Modell bearbeiten", "models.form.id": "ID", "models.form.idHint": "Eindeutige ID für das Routing, z. B. local-qwen", "models.form.provider": "Anbieter", "models.form.baseUrl": "Basis-URL", "models.form.model": "Modellname", "models.form.kind": "Typ", "models.form.costTier": "Kostenstufe", "models.form.priceIn": "Preis ein ($/1M)", "models.form.priceOut": "Preis aus ($/1M)", "models.form.apiKeyEnv": "API-Schlüssel Umgebungsvariable", "models.form.apiKeyEnvHint": "Name der Umgebungsvariable / des gespeicherten Geheimnisses für den Anbieterschlüssel.", "models.form.caps": "Fähigkeiten", "models.form.secret": "Geheimwert", "models.form.secretStored": "gespeichert", "models.form.secretEnv": "aus Umgebung", "models.form.secretMissing": "nicht gesetzt", "models.form.secretPlaceholder": "Schlüssel setzen oder ersetzen (nur Schreiben)", "models.deleteConfirm": "Modell \"{id}\" löschen?", // routing "routing.title": "Routing", "routing.subtitle": "Komplexitätsstufen einer priorisierten Modellliste zuordnen (Priorität = Fallback).", "routing.default": "Standardmodell", "routing.defaultHint": "Wird verwendet, wenn der Router nicht erreichbar ist.", "routing.tiers": "Stufen", "routing.tierHint": "Chips ziehen zum Sortieren; erstes bevorzugt, die übrigen sind Fallbacks.", "routing.addModel": "+ hinzufügen", "routing.addTier": "Stufe hinzufügen", "routing.tierName": "Stufenname", "routing.policy": "Richtlinie", "routing.policy.mode": "Modus", "routing.policy.fixed": "Feste Tabelle", "routing.policy.costAware": "Kostenoptimiert", "routing.policy.maxCost": "Max. Kosten pro Anfrage ($)", "routing.policy.minClass": "Mindestklasse je Stufe", "routing.empty": "Keine Modelle verfügbar — zuerst Modelle hinzufügen.", // protocols "protocols.title": "Protokolle", "protocols.subtitle": "Nur benötigte eingehende API-Oberflächen aktivieren. Änderungen wirken sofort.", "protocols.implemented": "implementiert", "protocols.planned": "geplant", "protocols.openai_chat": "OpenAI Chat Completions", "protocols.openai_chat.d": "POST /v1/chat/completions — kompatibel mit OpenAI SDK, LangChain, crewAI.", "protocols.openai_completions": "OpenAI Completions (legacy)", "protocols.openai_completions.d": "POST /v1/completions — Legacy-Integrationen.", "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 — automatische Client-Erkennung.", "protocols.anthropic_messages": "Anthropic Messages", "protocols.anthropic_messages.d": "POST /v1/messages — Claude-native Agenten.", "protocols.mcp": "MCP (Model Context Protocol)", "protocols.mcp.d": "JSON-RPC / SSE — MCP-native Orchestratoren.", "protocols.native_passthrough": "Nativer Passthrough", "protocols.native_passthrough.d": "POST /route — direkter Zugriff auf die Routing-Entscheidung.", // keys "keys.title": "API-Schlüssel", "keys.subtitle": "Virtuelle Gateway-Schlüssel für Ihre Agenten. Anbieterschlüssel verlassen das Gateway nicht.", "keys.add": "Neuer Schlüssel", "keys.empty": "Keine Schlüssel konfiguriert — Gateway im offenen Modus (keine Authentifizierung).", "keys.openMode": "Offener Modus: Alle Anfragen werden akzeptiert (kein Schlüssel erforderlich).", "keys.col.key": "Schlüssel", "keys.col.account": "Account", "keys.col.rate": "Rate / Min.", "keys.col.models": "Erlaubte Modelle", "keys.form.title": "Neuer API-Schlüssel", "keys.form.account": "Account", "keys.form.rate": "Ratenlimit / Min.", "keys.form.allow": "Erlaubte Modelle", "keys.form.allowHint": "Leer lassen, um alle Modelle zu erlauben.", "keys.form.custom": "Eigener Schlüssel (optional)", "keys.form.customHint": "Leer lassen für automatische Generierung sk-gw-…", "keys.created": "Schlüssel erstellt — jetzt kopieren, er wird nicht mehr angezeigt:", "keys.revoke": "Widerrufen", "keys.revokeConfirm": "Diesen Schlüssel widerrufen?", "keys.allowAll": "alle", // playground "pg.title": "Testbereich", "pg.subtitle": "Prompt durch die Live-Pipeline senden und Routing-Entscheidung prüfen.", "pg.system": "System-Prompt", "pg.systemPlaceholder": "optionale Systemnachricht", "pg.prompt": "Prompt", "pg.promptPlaceholder": "Etwas fragen…", "pg.mode": "Modus", "pg.mode.auto": "Auto (Route)", "pg.mode.pinned": "Fixiertes Modell", "pg.profile": "Profil", "pg.model": "Modell", "pg.temp": "Temperatur", "pg.maxTokens": "Max. Tokens", "pg.send": "Senden", "pg.stream": "Streamen", "pg.sending": "Wird gesendet…", "pg.answer": "Antwort", "pg.empty": "Antwort und Routing-Entscheidung erscheinen hier.", "pg.decision": "Routing-Entscheidung", "pg.task": "Aufgabe", "pg.tier": "Tier", "pg.score": "Komplexität", "pg.selected": "Gewähltes Modell", "pg.source": "Route-Quelle", "pg.cost": "Kosten", "pg.latency": "Latenz", "pg.tokens": "Tokens (ein/aus)", "pg.failover": "Failover", "pg.error": "Anfrage fehlgeschlagen", // settings "settings.title": "Einstellungen", "settings.subtitle": "Gateway-Verbindung, Routing-Eingabe, Zuverlässigkeit und Beobachtbarkeit.", "settings.router": "Router-Verbindung", "settings.router.url": "Router-URL", "settings.router.keyEnv": "Router-Schlüssel Umgebungsvariable", "settings.router.timeout": "Timeout (ms)", "settings.router.verifyTls": "TLS-Zertifikat prüfen", "settings.router.taxonomy": "Taxonomie-ID", "settings.router.getKey": "Router-Key holen oder aufladen:", "settings.router.secret": "Router-Key (Wert)", "settings.router.test": "Router testen", "router.probe.ok": "Router OK ({ms} ms)", "router.probe.noKey": "Router-Key ist nicht gesetzt", "router.probe.auth": "Key abgelehnt — ungültig oder widerrufen", "router.probe.payment": "Zahlung erforderlich — Tarif abgelaufen oder Kontingent erschöpft", "router.probe.quota": "Ratenlimit überschritten", "router.probe.timeout": "Router-Zeitüberschreitung", "router.probe.unreachable": "Router nicht erreichbar", "router.probe.error": "Router-Fehler", "router.usage": "Verbrauch", "settings.route": "Routing-Eingabe", "settings.route.strategy": "Textstrategie", "settings.route.maxChars": "Max. Zeichen", "settings.route.cacheTtl": "Cache-TTL", "settings.route.profile": "Standardprofil", "settings.breaker": "Circuit Breaker", "settings.breaker.threshold": "Fehlerschwelle", "settings.breaker.cooldown": "Cooldown", "settings.log": "Protokollierung", "settings.log.level": "Log-Ebene", "settings.log.bodies": "Nachrichtentexte protokollieren (Datenschutz aus)", "settings.telemetry": "Telemetrie", "settings.telemetry.metrics": "Prometheus /metrics bereitstellen", "settings.cortiq": "Antwort-Metadaten", "settings.cortiq.echo": "cortiq-Routing-Block in Antworten einbetten", "settings.stats": "Statistiken", "settings.stats.enabled": "Anfrage-Statistiken aufzeichnen", "settings.stats.file": "Statistikdatei (JSONL)", "settings.stats.retention": "Aufbewahrung", "settings.listen": "Lausch-Adresse", "settings.export": "Konfiguration exportieren", "settings.import": "Konfiguration importieren", "settings.needsRestart": "Gespeichert. Einige Änderungen (Lausch-Adresse) erfordern einen Neustart.", // toasts / misc "toast.saved": "Änderungen gespeichert", "toast.deleted": "Gelöscht", "toast.probing": "Prüfe…", "toast.imported": "Konfiguration importiert", "dash.cache": "Semantischer Cache", "dash.cache.hitRate": "Trefferquote", "dash.cache.hits": "Treffer", "dash.cache.saved": "Gespart", "dash.cache.disabled": "Semantischer Cache ist deaktiviert — in den Einstellungen aktivieren.", "settings.cache": "Semantischer Cache", "settings.cache.enabled": "Semantischen Cache aktivieren", "settings.cache.threshold": "Ähnlichkeitsschwelle", "settings.cache.ttl": "Eintrags-TTL", "settings.cache.embed": "Embedding-Modell", "settings.cache.note": "Cache-Einstellungen werden nach einem Neustart wirksam.", // ── translated from en.js (previously falling back to English) ── // nav "nav.import": "Modell importieren", // dash "dash.clear": "Logs leeren", "dash.clearConfirm": "Alle erfassten Statistiken und Logs löschen? Das lässt sich nicht rückgängig machen.", "dash.cleared": "Logs geleert", // models "models.form.idOrModel": "Gib eine ID oder einen Modellnamen ein", "models.form.apiKey": "API-Schlüssel", "models.form.apiKeyPlaceholder": "API-Schlüssel einfügen", "models.form.apiKeyNotNeeded": "nicht erforderlich (lokaler Server)", "models.form.apiKeyHint": "Wird sicher im Gateway gespeichert und nicht erneut angezeigt.", "models.form.keyStored": "Ein Schlüssel ist gespeichert — leer lassen, um ihn zu behalten, oder einen neuen einfügen.", "models.form.keyFromEnv": "Es wird ein Schlüssel aus einer Umgebungsvariable verwendet.", "models.form.paramsTitle": "Generierungs- und Denkparameter (O(1), MTP, Temperatur)", "models.form.temperature": "Temperatur", "models.form.temperatureHint": "Generierungstemperatur (0.0 = deterministisch, 1.0+ = kreativ).", "models.form.topP": "Top-P (Nucleus Sampling)", "models.form.topPHint": "Sampling-Schwelle (0.0 .. 1.0).", "models.form.maxTokens": "Max. Tokens", "models.form.maxTokensHint": "Maximale Anzahl generierter Tokens.", "models.form.thinkBudget": "Denkmodus / Think Budget", "models.form.thinkBudgetHint": "Token-Budget fürs Nachdenken (0 = aus, N > 0 = max. Reasoning-Tokens).", "models.form.systemPrompt": "Standard-System-Prompt", "models.form.systemPromptHint": "Wird automatisch vorangestellt, wenn die Anfrage keinen System-Prompt enthält.", "models.form.systemPromptPlaceholder": "Du bist ein hilfreicher Assistent…", "models.form.testKey": "Testen & Modelle laden", "models.form.testing": "wird geprüft…", "models.form.foundModels": "{n} Modelle geladen", "models.form.modelPlaceholder": "tippen zum Suchen…", "models.form.modelHint": "Klicke „Testen & Modelle laden“, um die Liste mit deinem Schlüssel abzurufen, und wähle dann eines aus.", "models.managed": "verwaltet", "models.managedHint": "Wird vom verwalteten CMF-Server bereitgestellt (Einstellungen → Lokale Modelle). Dort konfigurieren.", // settings "settings.router.enabled": "Router verwenden (aus = nur lokale Modelle)", "settings.cmf": "Lokale Modelle (CMF)", "settings.cmf.localOnly": "Nur lokale Modelle verwenden", "settings.cmf.manage": "Lokalen Modellserver starten", "settings.cmf.autoInstall": "cortiq automatisch installieren (crates.io)", "settings.cmf.autoUpdate": "cortiq automatisch aktualisieren", "settings.cmf.model": "Pfad zum lokalen .cmf-Modell", "settings.cmf.port": "Port des lokalen Servers", "settings.cmf.modelId": "Modell-ID im Pool", "settings.cmf.note": "Stellt ein lokales .cmf über cortiq bereit (github.com/infosave2007/cmf). Funktioniert auch, wenn der Router nicht erreichbar ist.", "settings.cmf.threads": "Worker-Threads", "settings.cmf.gpu": "GPU verwenden (Metal / wgpu)", "settings.cmf.speedNote": "Threads parallelisieren die Decode-Matvecs (~3× schneller; 0 = Standard der Runtime). GPU-Offload hilft vor allem beim Prefill langer Prompts — das Decoding ist speicherbandbreitenbegrenzt und daher auf Apple Silicon ungefähr neutral.", "settings.cmf.pick": "Modell auswählen", "settings.cmf.models": "Lokale Modelle", "settings.cmf.modelsHelp": "Jede Zeile ist ein Modell, das das Gateway ausführt (eigenes cortiq serve auf eigenem Port) und im Pool registriert. Füge so viele hinzu, wie du .cmf-Dateien und freie Ports hast.", "settings.cmf.rowHint": "ID · .cmf-Datei · Port · Threads · GPU. Änderungen greifen nach einem Neustart; das Löschen einer Zeile stoppt diesen Server.", "settings.cmf.addServer": "+ Lokales Modell hinzufügen", "settings.cmf.checkPort": "Port prüfen", "settings.cmf.portFree": "Port ist frei", "settings.cmf.portBusy": "Port ist belegt", "settings.cmf.useSuggested": "{port} verwenden", "settings.cmf.serving": "{model} läuft auf :{port}", "settings.cmf.intro": "Modelle lokal mit der cortiq-Engine ausführen — funktioniert auch offline oder wenn der Router ausfällt.", "settings.cmf.runtime": "cortiq-Runtime", "settings.cmf.runtimeHelp": "Das Kommandozeilenwerkzeug `cortiq`, das .cmf-Modelle lädt und ausführt. Einmal installieren, bevor du einen lokalen Server startest.", "settings.cmf.install": "cortiq installieren", "settings.cmf.reinstall": "Neu installieren / aktualisieren", "settings.cmf.installing": "wird installiert… (kompiliert, einige Minuten)", "settings.cmf.installedOk": "cortiq installiert", "settings.cmf.notInstalled": "nicht installiert", "settings.cmf.addModel": "Modell hinzufügen", "settings.cmf.addModelHelp": "Modelle werden im Tab „Modell importieren“ heruntergeladen und konvertiert (HuggingFace → .cmf). Richte den lokalen Server danach unten auf die .cmf-Datei aus.", "settings.cmf.importNote": "Noch kein Modell? Importiere eines:", "settings.cmf.importLink": "Import öffnen", "settings.cmf.modelHelp": "Pfad zur .cmf-Datei, die bereitgestellt werden soll (z. B. models/qwen.cmf), erzeugt im Import-Tab. Mehrere Modelle für verschiedene Aufgaben? Importiere sie und wechsle diesen Pfad.", "settings.cmf.portHelp": "TCP-Port, auf dem der lokale Modellserver lauscht (Standard 8081). Nur ändern, wenn er mit einem anderen Dienst kollidiert.", "settings.cmf.threadsHelp": "Wie viele CPU-Kerne für die Generierung genutzt werden. Mehr = schneller (~3× gegenüber einem Kern); 0 überlässt die Wahl der Runtime.", "settings.cmf.gpuHelp": "Matrixberechnungen auf die GPU auslagern (Metal/wgpu). Auf Apple Silicon beschleunigt das vor allem lange Prompts — das Decoding ist speicherbandbreitenbegrenzt.", "settings.cmf.localOnlyHelp": "Jede Anfrage an das lokale Modell leiten und dabei Router sowie Cloud-Anbieter ignorieren.", "settings.cmf.manageHelp": "Das Gateway startet beim Hochfahren `cortiq serve` für die untenstehende .cmf-Datei und routet dorthin. Erfordert ein installiertes cortiq (Schritt 1). Greift nach einem Neustart.", "settings.cmf.autoInstallHelp": "Wenn cortiq beim Start fehlt, automatisch von crates.io installieren.", "settings.cmf.autoUpdateHelp": "Beim Start cortiq auf die neueste Version aktualisieren, falls eine neuere existiert.", "settings.router.enabledHelp": "Den cortiq-Router jede Anfrage klassifizieren lassen (Aufgabentyp + Komplexität) und ein Modell wählen. Aus = nur die lokale Routing-Tabelle verwenden.", "settings.router.verifyTlsHelp": "Das TLS-Zertifikat des Routers prüfen. Nur bei einem selbstsignierten oder IP-gebundenen Zertifikat abschalten.", "settings.telemetry.metricsHelp": "Prometheus-Metriken unter GET /metrics bereitstellen.", "settings.cortiq.echoHelp": "Ein Feld `cortiq` (Aufgabe, Modell, Kosten) zu jedem Antwort-Body hinzufügen. Response-Header werden immer gesendet.", "settings.stats.enabledHelp": "Aktuelle Anfragen aufzeichnen, um Dashboard und Diagramme zu speisen.", "settings.cache.enabledHelp": "Semantischer Cache: eine gespeicherte Antwort zurückgeben, wenn ein neuer Prompt einem früheren sehr ähnlich ist, und den Modellaufruf überspringen. Erfordert ein Embedding-Modell im Pool.", "settings.log.bodiesHelp": "Vollständige Nachrichteninhalte von Anfrage und Antwort loggen. Aus Datenschutzgründen standardmäßig aus.", "settings.router.saveKey": "Schlüssel speichern", "settings.router.keySaved": "Router-Schlüssel gespeichert", "settings.router.keyEmpty": "Füge zuerst den Schlüssel ein", "settings.router.secretHelp": "Füge den Schlüssel aus deiner E-Mail von api.allaigate.com ein und klicke auf „Schlüssel speichern“. Das ist KEIN Wert aus „API-Schlüssel“ — die sind für Clients, die dein Gateway aufrufen.", "settings.router.keyStoredMask": "•••••••••••• — Schlüssel gespeichert (zum Ersetzen erneut einfügen)", "settings.route.strategyHelp": "Welcher Text zur Klassifizierung an den Router geht: last_user = nur die letzte Nutzernachricht; last_user_plus_system = letzte Nutzernachricht + System-Prompt; concat_all = die gesamte Unterhaltung.", "settings.route.maxCharsHelp": "Maximale Zeichenzahl dieses Textes, die an den Router gesendet wird (längerer Text wird gekürzt). Mehr = genauere Klassifizierung, aber langsamere und teurere Router-Aufrufe.", "settings.route.cacheTtlHelp": "Wie lange eine Routing-Entscheidung für eine identische Anfrage zwischengespeichert wird, bevor der Router erneut gefragt wird (z. B. 60s, 5m).", "settings.route.profileHelp": "Standard-Routing-Profil, wenn eine Anfrage keines angibt: cost-saver (am günstigsten), balanced oder quality-first (bestes Modell). Beeinflusst, welches Modell der Router wählt.", // import "import.subtitle": "Suche auf HuggingFace, konvertiere in ein lokales .cmf und stelle es bereit.", "import.searchPlaceholder": "HuggingFace-Modelle suchen (z. B. qwen3, llama)…", "import.searching": "Suche läuft…", "import.noResults": "Keine Modelle gefunden.", "import.configure": "Konvertierung einrichten", "import.outName": "Ausgabename", "import.outNameHint": "Name der .cmf-Datei (Buchstaben, Ziffern, - und _).", "import.quant": "Quantisierung", "import.convert": "Konvertieren & laden", "import.converting": "Konvertierung", "import.started": "Konvertierung gestartet", "import.failed": "Konvertierung fehlgeschlagen — siehe Log.", "import.register": "Als lokales Modell registrieren", "import.registered": "Als '{id}' registriert. Starte cortiq-server, um es bereitzustellen.", "import.jobs": "Downloads & Konvertierungen", "import.cancel": "Abbrechen", "import.cancelling": "Wird abgebrochen — unvollständige Ausgabe wird entfernt…", "import.delete": "Löschen", "import.deleteConfirm": "Dieses Modell und seine konvertierte .cmf-Datei von der Festplatte löschen?", "import.deleted": "Mitsamt Dateien gelöscht", "import.state.running": "läuft", "import.state.done": "fertig", "import.state.error": "Fehler", "import.state.cancelled": "abgebrochen", "import.featuredTitle": "Empfohlene fertige .cmf-Modelle", "import.featuredSub": "Vorkonvertierte .cmf-Modelle vom infosave-Konto auf HuggingFace — die Liste wird live gelesen, neue Modelle erscheinen von selbst.", "import.readyCmfBadge": "Fertiges .cmf", "import.directDownload": "Herunterladen", "import.q.q8_2f": "8-Bit Zwei-Feld (𝒲×θ) — empfohlen: bestes Verhältnis von Qualität und Größe.", "import.q.q8_row": "8-Bit pro Zeile — einfach und robust.", "import.q.q4": "4-Bit Block — am kleinsten, geringere Qualität.", "import.q.q4_tiled": "4-Bit gekachelt (Q4_TILED) — 1,66× schneller auf der Metal-GPU.", "import.q.vbit": "Variabel 3–8 Bit — Bit-Budget pro Experte.", "import.q.q1t": "1,58-Bit ternär (Q1T) — BitNet b1.58 mit spärlichen Ausreißern.", "import.q.q1s": "1-Bit spärlich (Q1S) — 1-Bit-Basis mit holografischen Ausreißern.", "import.q.q1p": "1-Bit PTQ (Q1P) — 1 Bit mit Fehlerdiffusion.", "import.q.q1": "1-Bit (Q1) — rein binäres Format.", "import.q.f16": "16-Bit — keine Quantisierung.", "import.q.f32": "32-Bit — volle Präzision (große Datei).", "import.adv.title": "Erweiterte Einstellungen", "import.adv.auto": "automatisch", "import.adv.linearCore": "Linearer Kern", "import.adv.linearHint": "Wie Layer mit linearer Attention übernommen bzw. gefaltet werden.", "import.adv.nphase": "vmf_phase Phasen/Kopf", "import.adv.vbitShape": "VBIT-Budgetform", "import.adv.meanBits": "VBIT mittlere Bits", "import.adv.shard": "Shard max. (GB)", "import.adv.noShard": "kein Sharding", "import.adv.skipMtp": "MTP-Kopf überspringen", "import.adv.o1": "O(1)-Attention", "import.adv.o1Hint": "Streaming-Attention mit konstantem Speicher: der KV-Cache wird nach dem Prefill freigegeben, lange Kontexte lassen den Speicher also nicht wachsen. Die Gewichte bleiben Byte-identisch — gespeichert wird nur ein Hinweis für die Ladezeit; du kannst jederzeit zurückwechseln (mit --o1 off starten). Auf Qwen3-0.6B validiert: alle Layer ≈ ×1,18 Perplexität.", "import.adv.o1Off": "aus — exakte Attention (Standard)", "import.adv.o1All": "alle — jeden Softmax-Layer konvertieren", "import.adv.o1Deep": "deep N — nur die N tiefsten Layer", "import.adv.o1Custom": "benutzerdefiniert — explizite Layer-Liste", "import.adv.o1DeepN": "N tiefe Layer", "import.adv.o1Layers": "Layer (kommagetrennt)", "import.adv.o1mHint": "Landmark-Budget (Standard 32)", "import.adv.o1windowHint": "Breite des exakten Fensters (Standard 128)", "import.adv.o1sinkHint": "permanente exakte Sink-Keys (Standard 4)", // onboarding "onboarding.title": "Ersteinrichtung", "onboarding.welcome": "Willkommen bei Cortiq Gateway", "onboarding.welcomeSub": "Wähle deine Sprache — du kannst sie jederzeit in der Kopfzeile ändern.", "onboarding.next": "Weiter", "onboarding.back": "Zurück", "onboarding.skip": "Vorerst überspringen", "onboarding.skipSetup": "Überspringen", "onboarding.finish": "Einrichtung abschließen", "onboarding.featuredTitle": "Fertige Modelle (ein Klick)", "onboarding.featuredSub": "Das sind bereits konvertierte .cmf-Modelle von infosave auf HuggingFace — einfach herunterladen, keine Konvertierung nötig. Wähle eines oder mehrere für den Sofortstart.", "onboarding.download": "Herunterladen", "onboarding.hfTitle": "Jedes HuggingFace-Modell — automatisch konvertiert", "onboarding.hfSub": "Suche ein beliebiges Modell, wähle eine Quantisierung, und wir konvertieren es automatisch nach .cmf. Keine manuellen Config-Änderungen.", "onboarding.noJobs": "Noch keine Downloads.", "onboarding.doneTitle": "Alles bereit", "onboarding.doneSub": "Heruntergeladene Modelle werden automatisch registriert. Weitere kannst du unter Import oder Modelle hinzufügen.", "onboarding.doneHint": "„Einrichtung abschließen“ verbindet jeden fertigen Download als lokales Modell, startet dessen .cmf-Server und richtet das Routing darauf aus. Alles lässt sich später unter Modelle ändern.", "onboarding.willRegister": "Werden als lokale Modelle verbunden", "onboarding.nothingToRegister": "Noch keine abgeschlossenen Downloads — nichts zu verbinden. Geh einen Schritt zurück und wähle ein Modell.", "onboarding.registeredN": "{n} Modell(e) verbunden: {ids}", "onboarding.runtimeMissing": "Die cortiq-Runtime ist nicht installiert — installiere sie unter Einstellungen → Lokale Modelle, um diese Modelle bereitzustellen.", "onboarding.downloaded": "heruntergeladen", "onboarding.update": "Aktualisieren", "onboarding.deleteFile": "Die .cmf-Datei von der Festplatte löschen", "onboarding.confirmDelete": "„{id}“ löschen? Die .cmf-Datei wird von der Festplatte entfernt.", "onboarding.unregistered": "Ebenfalls abgemeldet: {ids}", // playground: media generation + streaming metrics "pg.tab.chat": "Chat", "pg.tab.image": "Bild", "pg.tab.video": "Video", "pg.generate": "Generieren", "pg.generating": "Wird generiert…", "pg.genFailed": "Generierung fehlgeschlagen — siehe Log.", "pg.result": "Ergebnis", "pg.genMetrics": "Generierungsmetriken", "pg.imagePromptPlaceholder": "ein Rotfuchs im Schnee bei Sonnenuntergang, fotorealistisch, detailliertes Fell", "pg.videoPromptPlaceholder": "ein Corgi mit Kochmütze wirft einen Pfannkuchen, Brutzeln und ein fröhliches Bellen", "pg.imageEmpty": "Das generierte Bild erscheint hier.", "pg.videoEmpty": "Der generierte Clip (mit Ton) erscheint hier.", "pg.width": "Breite", "pg.height": "Höhe", "pg.steps": "Schritte", "pg.seed": "Seed", "pg.randomSeed": "Zufälliger Seed", "pg.cfgHint": "Guidance-Stärke; ≤ 1 schaltet CFG ab und halbiert die Arbeit.", "pg.frames": "Frames", "pg.framesHint": "Bei 24 fps; auf das Raster des Modells gerundet.", "pg.quality": "JPEG-Qualität", "pg.videoSizeHint": "Vielfache von 32; die trainierte kurze Kante ist 768.", "pg.videoStepsHint": "Die Turbo-LoRA ist auf 4 Schritte trainiert.", "pg.firstFrame": "Erstes Frame (optional)", "pg.lastFrame": "Letztes Frame (optional)", "pg.keyframeHint": "Macht den Lauf zu Keyframe-to-Video.", "pg.resolution": "Auflösung", "pg.genTime": "Generierungszeit", "pg.timePerStep": "Pro Schritt", "pg.timePerFrame": "Pro Frame", "pg.fileSize": "Dateigröße", "pg.duration": "Dauer", "pg.play": "Abspielen", "pg.noMediaModels": "Noch kein lokales {kind}-Modell. Lade eines (z. B. aus der infosave-Sammlung) unter Import herunter:", "pg.tokSpeed": "Geschwindigkeit", "pg.ttft": "Erstes Token", // ops: logs, system, notices, gallery, chat, snippets, bench "nav.logs": "Logs", "logs.subtitle": "Jüngstes Gateway-Log — das, was das Terminal zeigen würde.", "logs.filterPlaceholder": "filtern…", "logs.pause": "Pause", "logs.resume": "Fortsetzen", "logs.empty": "Nichts gefunden.", "notice.openAdmin": "Die Konsole ist ohne Token offen und von anderen Rechnern erreichbar. Setze einen Token, wenn diese Maschine nicht privat ist.", "notice.update": "Update verfügbar: v{v}.", "dash.sys.title": "System", "dash.sys.cores": "Kerne", "dash.sys.disk": "Festplatte (Modelle)", "dash.sys.free": "frei", "dash.sys.gateway": "Gateway", "fit.disk": "zu wenig Speicherplatz", "fit.diskTitle": "Der Download ist größer als der freie Platz auf der Modell-Festplatte.", "fit.ram": "passt evtl. nicht in den RAM", "fit.ramTitle": "Das Modell ist nahe an oder größer als der RAM dieser Maschine — es läuft womöglich nicht.", "pg.eta": "übrig", "pg.min": "Min", "pg.queued": "In der Warteschlange — Position {n}. Startet, sobald die aktuelle Generierung fertig ist.", "pg.gallery": "Letzte Generierungen", "pg.galDeleteConfirm": "Diese Generierung samt Dateien löschen?", "pg.clearChat": "Leeren", "keys.snip.title": "Deine App verbinden", "keys.snip.hint": "Füge eines der Beispiele in dein Projekt ein — nur der Schlüssel-Platzhalter muss ersetzt werden.", "keys.snip.withKey": "Die Beispiele unten enthalten bereits den gerade erstellten Schlüssel.", "keys.snip.openMode": "Keine API-Schlüssel konfiguriert — das Gateway akzeptiert jeden Wert.", "keys.snip.keyPh": "dein API-Schlüssel", "settings.restart": "Gateway neu starten", "settings.restartConfirm": "Gateway neu starten? Laufende Anfragen brechen ab; lokale Modellserver starten ebenfalls neu.", "settings.restarting": "Neustart — die Seite lädt neu, sobald das Gateway wieder da ist…", "bench.title": "Geschwindigkeit lokaler Modelle", "bench.hint": "Führt `cortiq bench` auf dieser Maschine aus — echte tok/s, ein Modell nach dem anderen.", "bench.run": "Messen", "bench.running": "misst…", "bench.failed": "fehlgeschlagen", "bench.none": "Noch keine lokalen .cmf-Chat-Modelle.", // task-based routing "task.chitchat": "Smalltalk", "task.code": "Code", "task.creative-writing": "Kreatives Schreiben", "task.extraction": "Datenextraktion", "task.math": "Mathematik", "task.qa": "Fragen & Antworten", "task.summarization": "Zusammenfassung", "task.translation": "Übersetzung", "routing.tasks.title": "Aufgabenbasiertes Routing", "routing.tasks.hint": "Die Modelle einer Regel kommen für ihre Aufgabe zuerst; die Komplexitätskette bleibt als Fallback. Leer = nur nach Komplexität.", "routing.tasks.inherit": "nach Komplexität (keine Regel)", "routing.tasks.share": "{p}% der Anfragen (7 T)", "routing.tasks.fromRouter": "Labels live vom Router", "routing.tasks.builtin": "Router nicht erreichbar — eingebauter Labelsatz", "routing.tasks.addCustom": "Aufgabe hinzufügen", "routing.tasks.addPlaceholder": "eigenes Label…", // benchmark view "nav.benchmark": "Benchmark", "bm.title": "Benchmark", "bm.subtitle": "Qualitäts- und Tempo-Proben durch die Live-Pipeline: Antworten per Schlüsselwort geprüft, Schleifen erkannt, tok/s und Zeit bis zum ersten Token je Modell.", "bm.models": "Zu testende Modelle", "bm.quickMode": "Schnelltest", "bm.quickHint": "Die schnelle Teilmenge mit kurzen Antworten — etwa eine Minute pro lokalem Modell.", "bm.suiteInfo": "Eingebaute Suite: {q} schnelle / {f} volle Tests, plus Ihre eigenen.", "bm.run": "Starten", "bm.pickModel": "Wählen Sie mindestens ein Modell.", "bm.testOf": "Test {i} von {n}", "bm.results": "Ergebnisse", "bm.quick": "schnell", "bm.test": "Test", "bm.cellHint": "Klick auf eine Zelle zeigt die vollständige Antwort.", "bm.history": "Frühere Läufe (in diesem Browser gespeichert)", "bm.custom": "Eigene Tests", "bm.customHint": "Prompt + kommagetrennte Schlüsselwörter, die die Antwort enthalten muss (| für Synonyme). Im Browser gespeichert.", "bm.promptPh": "Prompt…", "bm.checkPh": "Schlüsselwörter, kommagetrennt", "bm.addTest": "Test hinzufügen", "bm.emptyAnswer": "leere Antwort", "bm.loopDetected": "Schleife erkannt", // benchmark: routing mode, cost, live "bm.mode.routing": "Smartes Routing", "bm.mode.models": "Einzelne Modelle", "bm.mode.routingDesc": "Das Kernfeature des Produkts im Test: jede Probe läuft über cortiq-auto — Sie sehen, welche Aufgabe der Router erkannt hat, welches Modell er wählte, ob das den Erwartungen entspricht und was es gekostet hat.", "bm.mode.modelsDesc": "Dieselbe Suite, an gewählte Modelle gepinnt — Qualität, Tempo und Kosten im direkten Vergleich, am Router vorbei.", "bm.answersOk": "Antworten korrekt", "bm.classAcc": "Aufgaben-Klassifikation", "bm.modelDist": "Anfragen gingen an", "bm.expectedLbl": "erwartet:", "bm.answer": "Antwort", "bm.liveRunning": "läuft…", "bm.spent": "ausgegeben", "bm.verdict": "🏁 Fertig: Antworten {p}, ausgegeben {s}", "bm.clearHistory": "Alle löschen", // harness auto-setup (API keys view) "keys.h.claude": "Claude Code — ins Terminal einfügen (das Gateway spricht das Anthropic-Protokoll nativ):", "keys.h.codex": "Codex — hängt den Provider an ~/.codex/config.toml an und startet:", "keys.h.opencode": "OpenCode — schreibt ~/.config/opencode/opencode.json (überschreibt!) und startet:", "keys.h.continue": "Continue (VS Code / JetBrains) — hängt das Modell an ~/.continue/config.yaml an:", "keys.h.cline1": "Cline (VS Code) — in den Erweiterungseinstellungen wählen:", "keys.h.cline2": "Einstellungen → API Provider → OpenAI Compatible, dann die Werte oben einfügen.", "keys.h.note": "cortiq-auto = smartes Routing: der Router wählt das Modell pro Anfrage. Für ein festes Modell den exakten Namen angeben. Unter Windows die Skripte in Git Bash / WSL ausführen oder dieselben Variablen über die Systemumgebung setzen.", "keys.h.protoOff": "Das Anthropic-Protokoll (/v1/messages) ist deaktiviert — Claude Code kann sich nicht verbinden.", "keys.h.enableProto": "Aktivieren", "keys.h.st.installed": "Auf der Gateway-Maschine installiert", "keys.h.st.configured": "Bereits für dieses Gateway konfiguriert", "keys.h.st.notFound": "Auf der Gateway-Maschine nicht gefunden", "bm.degraded": "Router degradiert", "bm.routerDegraded": "Der Router hat nicht rechtzeitig geantwortet — die Anfrage nutzte die Fallback-Kette; die Klassifikation wird nicht gewertet.", "bm.cutByCap": "Budget ging fürs Denken drauf — keine Antwort mehr", "shell.uiStale": "Das Gateway wurde aktualisiert — diese Seite zeigt eine ältere Oberfläche.", "shell.reload": "Neu laden", "keys.col.requests": "Anfragen", "keys.col.tokens": "Tokens ein/aus", "keys.col.costAll": "$ gesamt", "routing.tasks.tier": "Komplexität", "routing.tasks.tierAuto": "Auto (Router)", "routing.tasks.tierHint": "Welches Modell diese Aufgabe bei welcher Komplexität bedient; \"jede\" führt auf allen Stufen. Reihenfolge = Fallback-Reihenfolge. High eskaliert weiterhin über \"jede\"-Einträge.", "routing.tasks.tierAny": "jede Komplexität", "routing.tasks.addModel": "Modell", "routing.bands.enable": "Eigene Komplexitätsgrenzen", "routing.bands.hint": "Ziehen Sie die Griffe: wo low endet und high beginnt — die Griffe schieben einander, die Zahlen aktualisieren sich live. Der kontinuierliche Router-Score wird mit IHREN Grenzen neu eingeteilt; ohne Häkchen gelten die Grenzen des Routers.", "tier.low": "leicht", "tier.medium": "mittel", "tier.high": "schwer", "bm.scoreHint": "Der kontinuierliche Komplexitätsscore des Routers (0..1) — die Grenzregler auf der Routing-Seite teilen ihn in Stufen.", "settings.cache.noEmbed": "Der Cache ist aktiviert, hat aber KEIN Embedding-Modell — er tut nichts. Fügen Sie dem Pool ein Modell mit kind = \"embedding\" hinzu (z. B. OpenAI text-embedding) oder wählen Sie unten eines.", "settings.cache.entries": "Einträge", "settings.cache.hits": "Treffer", "settings.cache.saved": "gespart", "keys.form.budget": "Monatsbudget, $ (0 = unbegrenzt)", "keys.form.budgetHint": "Überschreiten die Monatsausgaben des Kontos die Grenze, werden Anfragen mit 429 insufficient_quota abgelehnt.", "keys.budgetOf": "Budget {b}/Mon.", "dash.kpi.orBalance": "OpenRouter-Guthaben", };