{ "@@locale": "de", "appTitle": "Ch∆In Studio", "navWelcome": "Willkommen", "welcomeHeroTitle": "Ch∆In Platform", "welcomeHeroSubtitle": "Deterministische Workflow-Engine für KI-gestützte Dokumentenverarbeitung in regulierten Umgebungen.", "welcomePillarHubTitle": "Hub", "welcomePillarHubBody": "Ein Rust-Binary, das Module lädt und Flows ausführt. SQLite für den State. Kein Docker, kein Message-Broker, keine Hintergrunddienste, die gepflegt werden müssen.", "welcomePillarModuleTitle": "Modul", "welcomePillarModuleBody": "Eine kleine WebAssembly-Komponente, die eine Sache macht. Deklariert Netzwerk-Endpunkte, Dateien und Umgebungsvariablen, auf die sie zugreift; der Hub setzt die Liste durch.", "welcomePillarFlowTitle": "Flow", "welcomePillarFlowBody": "Eine YAML-Datei, die Module verkettet. Eingaben rein, Module laufen in der deklarierten Reihenfolge, Ausgaben raus — jeder Schritt in einem hash-verketteten Audit-Log festgehalten.", "welcomeTrustHeader": "TRUST-POSTURE", "welcomeTrustSandboxTitle": "Sandbox von Anfang an", "welcomeTrustSandboxBody": "Jedes Modul bringt eine explizite Berechtigungsliste mit — Netzwerk-Endpunkte, Dateien, Umgebungsvariablen. Der Hub setzt sie durch; ohne Operator-Freigabe verlässt nichts die Sandbox.", "welcomeTrustAuditTitle": "Manipulationssicheres Audit-Log", "welcomeTrustAuditBody": "Flow-Läufe, Installationen, Deinstallationen, Freigabe-Entscheidungen — alles wird in ein hash-verkettetes Audit-Log geschrieben. Die Diagnose-Seite verifiziert die Kette bei jedem Laden komplett.", "welcomeTrustAirgapTitle": "Air-Gap-tauglich", "welcomeTrustAirgapBody": "Der gesamte Hub steckt in einem einzigen Binary für Linux, macOS und Windows. Sobald ein Modul installiert ist, läuft der Flow, der es nutzt, ohne weiteren Netzwerkzugriff — ideal für regulierte Umgebungen.", "welcomeDocsHeader": "DOKUMENTATION", "welcomeDocsBody": "Operator-Erklärungen, inline gerendert. Kein Browser, kein externer Link — air-gap-tauglich.", "welcomeDocArchitectureTitle": "Architektur in einem Absatz", "welcomeDocArchitectureBlurb": "Hub, Modul, Flow — und wie die drei zusammenpassen.", "welcomeDocSecurityTitle": "Sandbox-Modell", "welcomeDocSecurityBlurb": "Was ein Modul deklariert, was der Operator deckelt, was der Hub durchsetzt.", "welcomeDocAuditTitle": "Manipulationssicheres Audit-Log", "welcomeDocAuditBlurb": "Wie die Hash-Kette funktioniert und warum WORM-1 für KRITIS reicht.", "welcomeDocFlowsTitle": "Flow-Komposition", "welcomeDocFlowsBlurb": "YAML-Grundlagen, Templating-Referenz, das Extract→Summarize-Beispiel.", "welcomeDocApprovalsTitle": "Freigaben", "welcomeDocApprovalsBlurb": "Human-in-the-Loop-Checkpoints — wann nutzen, wie das Audit-Log sie protokolliert.", "helpTooltip": "Hilfe", "errApprovalRejected": "Freigabe vom Reviewer abgelehnt.", "errApprovalRejectedHint": "Der Reviewer hat den Step abgelehnt. Begründung steht im Audit-Log.", "errApprovalTimedOut": "Freigabe-Timeout abgelaufen.", "errApprovalTimedOutHint": "Es wurde nicht rechtzeitig entschieden. Entweder `timeout_seconds` am Freigabe-Step erhöhen oder den Reviewer informieren.", "errOutputTooLarge": "Step-Output hat die Größenbegrenzung überschritten.", "errOutputTooLargeHint": "Entweder Output kürzen (Text truncaten, Bytes komprimieren) oder `max_output_size_mb` in der Operator-Config erhöhen.", "errServiceUnavailableForStep": "Host-Service nicht konfiguriert.", "errServiceUnavailableForStepHint": "Das Modul braucht einen Service (z.B. ollama, playwright), den der Operator nicht deklariert hat. Trage ihn unter `services:` in ~/.chain/config.yaml ein.", "errMissingValue": "Pflichtwert fehlt.", "errMissingValueHint": "Der Step erwartet eine Eingabe, die nicht verdrahtet ist — entweder zur Laufzeit liefern oder den vorgelagerten `$ref` korrigieren.", "errMcpUnreachable": "MCP-Endpunkt nicht erreichbar.", "errMcpUnreachableHint": "Der MCP-Server hat nicht geantwortet. Endpunkt in Einstellungen → Integrationen prüfen und sicherstellen, dass er läuft.", "errCapabilityNotInstalled": "Benötigte Capability nicht installiert.", "errCapabilityNotInstalledHint": "Im Text-Tab des Flows klickst du auf den Fix-Button — der installiert die Capability, sofern sie im Store ist.", "welcomeDocClose": "Schließen", "welcomeDocFailedToLoad": "Doku konnte nicht geladen werden: {error}", "@welcomeDocFailedToLoad": { "placeholders": { "error": { "type": "String" } } }, "welcomeChecklistHeader": "ERSTE SCHRITTE", "welcomeChecklistBody": "Vier Schritte zu einem funktionierenden Hub. Live-Zustand — nach jeder Änderung aktualisieren.", "welcomeChecklistAi": "System-AI konfigurieren", "welcomeChecklistAiHint": "Einstellungen → System-AI. Wird für die KI-Suche und Fehlererklärungen gebraucht.", "welcomeChecklistMcp": "Öffentliche Capability-Quelle hinzufügen", "welcomeChecklistMcpHint": "Im Store eine MCP-Quelle hinzufügen oder unter Einstellungen → MCP-Clients konfigurieren.", "welcomeChecklistModule": "Ein Text-Modul installieren", "welcomeChecklistModuleHint": "Im Store ein Modul aus der Kategorie deiner Wahl installieren. Module sind sandboxed Ch∆In-Komponenten.", "welcomeChecklistFlow": "Einen gespeicherten Flow starten", "welcomeChecklistFlowHint": "Flows → einen wählen → Starten. Studio bringt einige Demo-Flows mit; auch ein eigener tut's.", "welcomeChecklistAllDone": "Alle vier Schritte erledigt.", "welcomeChecklistDismiss": "Checkliste ausblenden", "welcomeChecklistRefresh": "Aktualisieren", "welcomeChecklistRefreshing": "Prüfe…", "welcomeChecklistDone": "Erledigt", "welcomeChecklistTodo": "Offen", "navDoctor": "Diagnose", "navModules": "Module", "navStore": "Store", "navFlows": "Flows", "navAudit": "Protokoll", "navApprovals": "Freigaben", "connectionConnected": "verbunden", "connectionUnreachable": "nicht erreichbar", "connectionConnecting": "verbinde…", "connectionStartHub": "Hub starten", "connectionTapToStart": "antippen zum Starten", "sidebarSettingsTooltip": "Einstellungen (⌘;)", "sidebarChannelTooltip": "Aktiver Kanal — klicken zum Wechseln.\nproduction = stabil · beta = Vorabversion · dev = laufend · local = Arbeitsumgebung", "buttonCancel": "Abbrechen", "buttonSave": "Speichern", "buttonClose": "Schließen", "buttonRetry": "Erneut versuchen", "buttonRefresh": "Aktualisieren", "buttonInstall": "Installieren", "buttonUninstall": "Deinstallieren", "buttonDetails": "Details", "buttonAdd": "Hinzufügen", "buttonRemove": "Entfernen", "buttonOpen": "Öffnen", "buttonExplain": "Erklären", "buttonReadDocs": "Doku öffnen", "buttonCopy": "In Zwischenablage kopieren", "buttonCopied": "Kopiert", "buttonShowDetails": "Details anzeigen", "buttonHideDetails": "Details ausblenden", "storeInstallableOnly": "Nur installierbare", "storePillComingSoon": "Bald verfügbar", "storeNotInstallableInline": "Dieses Modul ist auf der Roadmap (Status: {status}). Es gibt noch kein installierbares Bundle — Repository verfolgen für Updates.", "@storeNotInstallableInline": { "placeholders": { "status": { "type": "String" } } }, "mcpSuggestionDeepwikiDesc": "Öffentliches HTTPS — KI-gestützte Doku-Suche in GitHub-Repos. Kein Node, kein API-Key.", "mcpSuggestionSemgrepDesc": "Öffentliches HTTPS — Security-Scanning von Code-Schwachstellen. Kein Node, kein API-Key.", "mcpSuggestionFilesystemDesc": "Anthropic — Dateien in /tmp lesen / schreiben. Pfad vor dem Speichern anpassen.", "mcpSuggestionFetchDesc": "Anthropic — beliebige HTTP(S)-URLs als Markdown abrufen.", "mcpSuggestionGithubDesc": "Anthropic — Issues, PRs, Repo-Dateien. Braucht einen GitHub-PAT in der Env-Variable.", "mcpSuggestionPuppeteerDesc": "Anthropic — Headless-Browser-Automation für Screenshots / Scraping.", "mcpSuggestionPostgresDesc": "Anthropic — Read-only-SQL-Queries gegen eine Postgres-Datenbank. URL anpassen.", "mcpSuggestionSqliteDesc": "Anthropic — Abfragen gegen eine lokale SQLite-Datei. Pfad anpassen.", "mcpSuggestionBraveSearchDesc": "Anthropic — Websuche via Brave. API-Key erforderlich.", "mcpSuggestionMemoryDesc": "Anthropic — persistenter Knowledge-Graph als Agenten-Gedächtnis.", "mcpSuggestionTimeDesc": "Anthropic — aktuelle Uhrzeit + Zeitzonen-Konvertierung.", "mcpServerEnLanguageBadge": "Server-Text in Englisch — Studio zeigt ihn wie geliefert.", "themePluginHeader": "Theme-Plugin (wirkt sofort)", "themeApplied": "Theme aktiv: {name}", "@themeApplied": { "placeholders": { "name": {"type": "String"} } }, "themePluginFailed": "Theme-Plugin konnte nicht geladen werden — vorheriges Theme bleibt.", "themePluginNone": "Standard (kein Plugin)", "themePluginHint": "Built-in- und Plugin-Kacheln bringen handkuratierte Paletten mit. Die Kachel „Eigene Farbe\" leitet aus einer gewählten Seedfarbe eine vollständige Material-3-Palette ab (primary, secondary, tertiary, surface, …) — das ist ein vollwertiges Theme, kein Einzelfarb-Tweak.", "themePluginEmpty": "Kein Theme-Plugin installiert. Im Store eines aus der Kategorie studio-plugin auswählen.", "themePluginCustom": "Eigene Farbe", "themePluginCustomDialogTitle": "Eigenes Theme — Seedfarbe wählen", "themePluginCustomHexLabel": "Hex-Farbe", "themePluginCustomPreview": "Live-Vorschau", "themePluginCustomCancel": "Abbrechen", "themePluginCustomApply": "Anwenden", "settingsTitle": "Hub-Endpunkt", "settingsHost": "Host", "settingsPort": "Port", "settingsTls": "TLS", "settingsSaveAndConnect": "Mit Endpoint verbinden", "settingsLanguage": "Sprache", "settingsLanguageHint": "Sprache der App. Wirkt auf alle Seiten; mehrsprachige Store-Einträge folgen ebenfalls.", "settingsHubEndpointHint": "Wohin soll Studio sich verbinden? Standard ist der lokale Hub auf 127.0.0.1:50051.", "settingsTlsSubtitle": "https/grpc-secure", "settingsPortError": "Port muss 1–65535 sein", "channelsBlurb": "Hub-Kanal wechseln (schreibt ~/.chain/current-channel und startet den Daemon neu). Verbinden ändert nur die Wire von Studio.", "channelsActionsTooltip": "Kanal-Aktionen", "systemAiHeader": "SYSTEM-AI", "systemAiEnabled": "aktiv", "systemAiOff": "aus", "systemAiEdit": "Bearbeiten…", "systemAiConfigure": "Konfigurieren…", "systemAiOffBlurb": "Aus — Fehlererklärungen auf der Protokoll-Seite sind deaktiviert. Klicke Konfigurieren…, um einen Provider zu wählen (Ollama / OpenAI / LM Studio / vLLM / Eigene). Die Operator-Konfig wird direkt überschrieben; kein Daemon-Neustart nötig.", "mcpServersCount": "{n} {n, plural, =1{Server} other{Server}}", "@mcpServersCount": { "placeholders": { "n": { "type": "int" } } }, "mcpRediscoverTooltip": "Discovery neu ausführen", "mcpAddTooltip": "MCP-Server hinzufügen", "mcpRemoveTooltip": "Server entfernen", "mcpToolsCount": "{n} Tools", "@mcpToolsCount": { "placeholders": { "n": { "type": "int" } } }, "n8nEndpointsCount": "{n} {n, plural, =1{Endpunkt} other{Endpunkte}}", "@n8nEndpointsCount": { "placeholders": { "n": { "type": "int" } } }, "n8nWorkflowsCount": "{n} Workflows", "@n8nWorkflowsCount": { "placeholders": { "n": { "type": "int" } } }, "n8nRediscoverTooltip": "Discovery neu ausführen", "n8nAddTooltip": "n8n-Endpunkt hinzufügen", "n8nRemoveTooltip": "Endpunkt entfernen", "addMcpTitle": "MCP-Server hinzufügen", "addMcpIntro": "Tools, die der Server via `tools/list` anbietet, erscheinen im Store als `mcp..`-Fähigkeiten.", "addMcpSuggestionsLabel": "Vorschläge — zum Vorausfüllen klicken", "addMcpNameLabel": "Name (keine Punkte)", "addMcpNameHint": "filesystem", "addMcpEndpointLabel": "Endpunkt", "addMcpEndpointHint": "http://127.0.0.1:3001/mcp", "addMcpApiKeyLabel": "API-Key-Umgebungsvariable (optional)", "addMcpApiKeyHint": "MCP_FILESYSTEM_TOKEN", "addMcpNotesLabel": "Notizen (optional)", "addMcpAddButton": "Hinzufügen + Discovery", "addN8nTitle": "n8n-Endpunkt hinzufügen", "addN8nIntro": "Aktive Workflows erscheinen im Store als `n8n..`-Fähigkeiten.", "addN8nNameLabel": "Name (keine Punkte)", "addN8nNameHint": "ops", "addN8nBaseUrlLabel": "Basis-URL (ohne /api/v1)", "addN8nBaseUrlHint": "https://n8n.example.com", "addN8nApiKeyLabel": "API-Key-Umgebungsvariable (optional)", "addN8nApiKeyHint": "N8N_OPS_KEY", "addN8nNotesLabel": "Notizen (optional)", "addN8nAddButton": "Hinzufügen + Discovery", "addedMcpToast": "MCP-Server „{name}\" hinzugefügt.", "@addedMcpToast": { "placeholders": { "name": { "type": "String" } } }, "addedN8nToast": "n8n-Endpunkt „{name}\" hinzugefügt.", "@addedN8nToast": { "placeholders": { "name": { "type": "String" } } }, "addFailedToast": "Hinzufügen fehlgeschlagen: {error}", "@addFailedToast": { "placeholders": { "error": { "type": "String" } } }, "removeFailedToast": "Entfernen fehlgeschlagen: {error}", "@removeFailedToast": { "placeholders": { "error": { "type": "String" } } }, "refreshFailedToast": "Aktualisieren fehlgeschlagen: {error}", "@refreshFailedToast": { "placeholders": { "error": { "type": "String" } } }, "channelsHeader": "KANÄLE", "channelsActive": "aktiv", "channelsRunning": "läuft", "channelsStopped": "gestoppt", "channelsConnect": "Studio mit diesem Kanal verbinden", "channelsSwitch": "Diesen Kanal aktivieren", "channelsEnableAutostart": "Autostart bei Anmeldung aktivieren", "channelsDisableAutostart": "Autostart deaktivieren", "storeSearchHint": "Module suchen — Name, Tagline, Tag, Fähigkeit…", "storeAskHint": "Was brauchst du? Versuch's mit „ein Modul, das tabellarische Daten liest\" oder tippe einfach einen Begriff.", "storeAskSubmit": "Suchen", "storeAskAi": "KI fragen", "storeAskClear": "Frage zurücksetzen", "storeAskAiThinking": "Module werden durchsucht…", "storeAskAiUnavailable": "Konfiguriere eine System-AI in den Einstellungen, um Fragen in normaler Sprache zu stellen.", "storeAskNoMatches": "Keine Treffer — Frage verfeinern oder im Grid unten stöbern.", "storeAskAnswerLabel": "KI-Vorschlag", "storeAskAnswerWhy": "Warum es passt", "storeAskMatchPill": "Treffer", "storeFilterLabel": "Filter", "storeFilterActiveCount": "{n} aktiv", "@storeFilterActiveCount": { "placeholders": { "n": { "type": "int" } } }, "storeFilterReset": "Filter zurücksetzen", "storeFilterApply": "Fertig", "storeFilterStatusGroup": "Status", "storeFilterSourceGroup": "Quelle", "storeFilterInstalledGroup": "Nur installierte zeigen", "storeFeatured": "EMPFOHLEN", "storeFeaturedHint": "kuratierte Auswahl · klicken für Details", "storeNoMatches": "Keine Treffer", "storeNoMatchesHint": "Filter anpassen oder Suche leeren, um alle Einträge zu sehen.", "storeClearFilters": "Filter zurücksetzen", "storeStatusAll": "Alle", "storeStatusPublished": "stabil", "storeStatusAlpha": "experimentell", "storeStatusPlanned": "geplant", "storeInstalledOnly": "Installiert", "storeCategoryLabel": "Kategorie", "storeCategoryAll": "Alle Kategorien", "storeCategoryBridge": "Verbindungen", "storeCategoryDebug": "Beispiele", "storeCategoryText": "Text", "storeCategoryLlm": "KI-Modelle", "storeCategorySystem": "System", "storeCategoryAuth": "Authentifizierung", "storeCategoryStorage": "Speicher", "storeCategoryChannel": "Kanäle", "storeCategoryWeb": "Web", "storeCategoryOrchestrator": "Orchestrierung", "storeNResults": "{n} Treffer", "@storeNResults": { "placeholders": { "n": { "type": "int" } } }, "storeReloadTooltip": "Aktualisieren", "storesManagerButton": "Store hinzufügen", "storesManagerTitle": "Module-Stores", "storesManagerIntro": "Der Hub führt die Module aller Stores unten zu einem Index zusammen. Füge die Index-URL eines Stores hinzu, damit seine Module hier installierbar werden.", "storesManagerAddSection": "Store hinzufügen", "storesManagerNameLabel": "Name", "storesManagerUrlLabel": "Index-URL (https:// oder file://)", "storesManagerAddAction": "Hinzufügen", "storesManagerBundled": "{count} Module · gebündelt", "storesManagerModuleCount": "{count} Module", "storesManagerAddFailed": "Store konnte nicht hinzugefügt werden", "storesManagerRemoveFailed": "Store konnte nicht entfernt werden", "storesManagerSuggested": "Vorgeschlagene Stores", "storesManagerAddShort": "Hinzufügen", "storesManagerNotAvailable": "Noch nicht verfügbar", "storesManagerNotAvailableHint": "Der Anbieter hat diesen Store-Index noch nicht veröffentlicht. Sobald er das tut, ist er installierbar.", "storesSuggestedReclaimDesc": "Recl∆Im — Module für Rechts- und Pflichten-Reform-Mapping", "storeTodayBadge": "HEUTE", "storeTodayDeck": "Von der Ch∆In-Redaktion", "storeTodayDismissTooltip": "Für diese Sitzung ausblenden", "storePillInstalled": "installiert", "storePillUpdate": "Update", "storeUpdateButton": "Update auf {version}", "@storeUpdateButton": { "placeholders": { "version": { "type": "String" } } }, "storeUpdateTooltip": "Installiert {installed} — Store bietet v{best}", "@storeUpdateTooltip": { "placeholders": { "installed": { "type": "String" }, "best": { "type": "String" } } }, "storeNoTagline": "(keine Beschreibung)", "storeUninstallTitle": "Modul deinstallieren?", "storeUninstallBody": "Entfernt {name} aus diesem Hub. Flows, die es verwenden, schlagen beim nächsten Lauf fehl.", "@storeUninstallBody": { "placeholders": { "name": { "type": "String" } } }, "storeInstalledToast": "{name} v{version} installiert.", "@storeInstalledToast": { "placeholders": { "name": { "type": "String" }, "version": { "type": "String" } } }, "storeInstallFailedToast": "Installation fehlgeschlagen: {error}", "@storeInstallFailedToast": { "placeholders": { "error": { "type": "String" } } }, "storeUninstalledToast": "{name} v{version} deinstalliert.", "@storeUninstalledToast": { "placeholders": { "name": { "type": "String" }, "version": { "type": "String" } } }, "storeUninstallFailedToast": "Deinstallation fehlgeschlagen: {error}", "@storeUninstallFailedToast": { "placeholders": { "error": { "type": "String" } } }, "storeOpenBrowserFailed": "Browser konnte nicht geöffnet werden: {error}", "@storeOpenBrowserFailed": { "placeholders": { "error": { "type": "String" } } }, "storeSectionTags": "Tags", "storeSectionRequiredCapabilities": "Erforderliche Fähigkeiten", "storeSectionRequiredHostServices": "Erforderliche Host-Dienste", "storeSectionScreenshots": "Screenshots", "storeSectionDocumentation": "Dokumentation", "storeSectionSource": "Quelle", "storeSectionPermissions": "Deklarierte Berechtigungen", "storeSectionDirectory": "Modul-Verzeichnis", "storeSectionPermissionsNone": "(keine — reines Berechnungsmodul)", "storeInstallingButton": "Installiere…", "storeNotInstallable": "Nicht installierbar", "storeNotInstallableTooltip": "Status „{status}\" — Installations-Pfad noch nicht verdrahtet.", "@storeNotInstallableTooltip": { "placeholders": { "status": { "type": "String" } } }, "storeInstallProgressTitle": "Installation von {name}", "@storeInstallProgressTitle": { "placeholders": { "name": { "type": "String" } } }, "storeInstallProgressBody": "Holen, verifizieren, entpacken…", "storeLoadDocs": "Dokumentation laden", "storeDocsHint": "README inline gerendert; nutzt das Registry-Token des Hubs, falls nötig.", "storeDocsFetching": "README wird geladen…", "storeOpenRepoButton": "Repository im Browser öffnen", "storeDocsErrorNotFound": "Dieses Modul ist nicht im Store-Index des Hubs enthalten.", "storeDocsErrorNoDocs": "Für dieses Modul ist keine Repository-URL hinterlegt.", "storeDocsErrorAuth": "Die Registry erfordert Authentifizierung, um dieses README zu laden. Setze CHAIN_REGISTRY_TOKEN in der Umgebung des Daemons und starte den Hub neu.", "storeDocsErrorNetwork": "Netzwerkfehler beim Laden des README. {detail}", "@storeDocsErrorNetwork": { "placeholders": { "detail": { "type": "String" } } }, "storeDocsErrorParse": "README ist kein gültiges UTF-8.", "storeDocsErrorGeneric": "README konnte nicht geladen werden.", "storeSourceLabel": "Quelle", "storeSourceAll": "Alle Quellen", "storeSourceNative": "Nativ", "storeSourceMcp": "MCP", "storeSourceN8n": "n8n", "storeProvenanceNative": "nativ", "storeProvenanceMcp": "mcp · {provider}", "@storeProvenanceMcp": { "placeholders": { "provider": { "type": "String" } } }, "storeProvenanceN8n": "n8n · {provider}", "@storeProvenanceN8n": { "placeholders": { "provider": { "type": "String" } } }, "storeRecommendedTitle": "Öffentliche Quelle hinzufügen — ein Klick", "storeRecommendedBody": "Kuratierte MCP-Server über HTTPS erreichbar. Kein Subprozess, kein API-Key, kein Node. Föderierte Fähigkeiten erscheinen sofort im Store.", "storeRecommendedAddTooltip": "Hinzufügen und entdecken", "storeRecommendedAdding": "Wird hinzugefügt…", "storeRecommendedDeepWikiTagline": "GitHub-Repo-Doku-Suche (KI-gestützt)", "storeRecommendedSemgrepTagline": "Security-Scanning für Code-Schwachstellen", "storeProviderAddedToast": "{name} hinzugefügt — {n} {n, plural, =1{föderierte Fähigkeit} other{föderierte Fähigkeiten}}.", "@storeProviderAddedToast": { "placeholders": { "name": { "type": "String" }, "n": { "type": "int" } } }, "storeProviderAddedZeroToast": "{name} ist eingetragen, aber der Server hat noch keine Fähigkeiten geliefert. Öffne Einstellungen → MCP-Clients, um Discovery erneut zu versuchen oder den Server zu prüfen.", "@storeProviderAddedZeroToast": { "placeholders": { "name": { "type": "String" } } }, "storeProviderAddFailed": "{name} konnte nicht hinzugefügt werden: {error}", "@storeProviderAddFailed": { "placeholders": { "name": { "type": "String" }, "error": { "type": "String" } } }, "auditTitle": "Protokoll", "auditNoEvents": "Noch keine Ereignisse", "auditNoEventsHint": "Starte einen Flow, um den Audit-Stream zu füllen.\nEreignisse erscheinen innerhalb von Sekunden.", "auditFilterAll": "alle", "auditFilterFlow": "Flow", "auditFilterStep": "Step", "auditFilterModule": "Modul", "auditClearLogTooltip": "Protokoll löschen (nur local/dev Kanal)", "auditClearedToast": "{n} Ereignisse auf Kanal „{channel}\" gelöscht. Kette mit Marker neu geseedet.", "@auditClearedToast": { "placeholders": { "n": { "type": "int" }, "channel": { "type": "String" } } }, "auditClearFailed": "Löschen fehlgeschlagen: {detail}", "@auditClearFailed": { "placeholders": { "detail": { "type": "String" } } }, "auditExplain": "Erklären", "auditReask": "Neu fragen", "auditAsking": "Frage läuft…", "auditSystemAi": "SYSTEM-AI", "auditCachedPill": "gecacht", "auditOriginalLatency": "ursprünglich {ms} ms", "@auditOriginalLatency": { "placeholders": { "ms": { "type": "int" } } }, "auditLatency": "{ms} ms", "@auditLatency": { "placeholders": { "ms": { "type": "int" } } }, "auditRegenerateTooltip": "Neu generieren — Cache überspringen, Modell erneut fragen", "auditLiveStatus": "live · Abfrage alle 2s · {n} {n, plural, =1{Ereignis} other{Ereignisse}}", "@auditLiveStatus": { "placeholders": { "n": { "type": "int" } } }, "auditDisconnected": "getrennt · {error}", "@auditDisconnected": { "placeholders": { "error": { "type": "String" } } }, "auditHashChainVerified": "Hash-Kette verifiziert", "auditDetailHeader": "DETAIL", "auditAskingFull": "Frage an die konfigurierte System-AI läuft…", "auditFixLabel": "FIX", "auditCachedTooltipKnown": "Aus dem lokalen Cache geliefert. Ursprünglich erzeugt am {at}{hits}.", "@auditCachedTooltipKnown": { "placeholders": { "at": { "type": "String" }, "hits": { "type": "String" } } }, "auditCachedTooltipUnknown": "Aus dem lokalen Cache geliefert. Ursprünglicher Zeitpunkt unbekannt{hits}.", "@auditCachedTooltipUnknown": { "placeholders": { "hits": { "type": "String" } } }, "auditCachedTooltipHits": " · {n} Treffer", "@auditCachedTooltipHits": { "placeholders": { "n": { "type": "int" } } }, "auditConfigureSystemAi": "System-AI unter Einstellungen konfigurieren (Cmd+,)", "auditClearDialogTitle": "Audit-Log löschen?", "auditClearDialogBody": "Löscht jedes Audit-Event auf dem aktiven Kanal und seedet einen neuen chain.reset-Marker mit Prüfer und Begründung. Auf beta / production verweigert. Nicht umkehrbar.", "auditClearReviewerLabel": "Prüfer", "auditClearReasonLabel": "Begründung (im chain.reset-Marker festgehalten)", "auditClearReasonHelper": "Erforderlich — Auditoren werden das lesen.", "auditClearLogButton": "Log löschen", "modulesTitle": "Module", "modulesNoneTitle": "Noch keine Module", "modulesNoneHint": "`chain install ` ausführen oder ~/.chain/modules/ prüfen.", "modulesReloadTooltip": "Aktualisieren", "modulesRecentActivity": "LETZTE AKTIVITÄT", "modulesRecentActivityHint": "letzte {n} install/uninstall-Ereignisse aus dem Audit-Log", "@modulesRecentActivityHint": { "placeholders": { "n": { "type": "int" } } }, "modulesActivityInstalled": "installiert", "modulesActivityUninstalled": "deinstalliert", "modulesCapabilitiesLabel": "Fähigkeiten", "modulesUninstallTitle": "Modul deinstallieren?", "modulesUninstallBody": "Entfernt {name} v{version} von diesem Hub. Flows, die es verwenden, schlagen beim nächsten Lauf fehl. Ein `module.uninstalled`-Audit-Event wird festgehalten.", "@modulesUninstallBody": { "placeholders": { "name": { "type": "String" }, "version": { "type": "String" } } }, "modulesUninstalledToast": "{name} v{version} deinstalliert.", "@modulesUninstalledToast": { "placeholders": { "name": { "type": "String" }, "version": { "type": "String" } } }, "modulesUninstallFailed": "Deinstallation fehlgeschlagen: {error}", "@modulesUninstallFailed": { "placeholders": { "error": { "type": "String" } } }, "modulesUninstalling": "Wird deinstalliert…", "moduleSheetFailedToLoad": "Laden fehlgeschlagen: {error}", "@moduleSheetFailedToLoad": { "placeholders": { "error": { "type": "String" } } }, "moduleSheetCapabilities": "Fähigkeiten", "moduleSheetPermissions": "Deklarierte Berechtigungen", "moduleSheetNoPermissions": "(keine — reines Berechnungsmodul)", "flowsTitle": "Flows", "flowsReloadTooltip": "Aktualisieren", "flowsNoneTitle": "Keine gespeicherten Flows", "flowsNoneHint": "Flow speichern mit `chain admin flows save `, dann taucht er hier auf.", "flowsRunDialogTitle": "{name} ausführen", "@flowsRunDialogTitle": { "placeholders": { "name": { "type": "String" } } }, "flowsRunDialogBody": "Pro deklariertem Input ein Feld. Bytes-Inputs öffnen einen Datei-Picker; alle anderen sind Klartext. Der Starten-Button aktiviert sich, wenn alle Pflichtfelder gefüllt sind.", "flowsLoadingDefinition": "Inputs werden geladen…", "flowsDefinitionFailed": "Flow-Definition konnte nicht geladen werden", "flowsNoInputs": "Dieser Flow deklariert keine Inputs. Starten klicken, um loszulegen.", "flowsTypeBytesPick": "Datei wählen…", "flowsTypeBytesChange": "Datei ändern", "flowsTypeBytesNoFile": "Keine Datei ausgewählt", "flowsTypeBytesSize": "{n} Bytes", "@flowsTypeBytesSize": { "placeholders": { "n": { "type": "int" } } }, "flowsRunErrorTitle": "Flow-Lauf fehlgeschlagen", "flowsFileReadFailed": "„{path}\" konnte nicht gelesen werden: {error}", "@flowsFileReadFailed": { "placeholders": { "path": { "type": "String" }, "error": { "type": "String" } } }, "flowsMissingModulesLabel": "Braucht:", "flowsRunDisabledTooltip": "Erst die fehlenden Module installieren.", "flowsInstallAllButton": "Alle installieren ({n})", "@flowsInstallAllButton": { "placeholders": { "n": { "type": "int" } } }, "flowsInstallPillTooltip": "Zum Installieren klicken", "flowsInstallDepsTitle": "Abhängigkeiten installieren", "flowsInstallDepsBody": "Die fehlenden Module werden der Reihe nach installiert. Vorhandene Installationen bleiben unberührt.", "flowsInstallStatusPending": "Wartet", "flowsInstallStatusInstalling": "Wird installiert…", "flowsInstallStatusDone": "Installiert v{version}", "@flowsInstallStatusDone": { "placeholders": { "version": { "type": "String" } } }, "flowsInstallStatusFailed": "Fehlgeschlagen", "flowsInstallStatusFailedDetail": "{error}", "@flowsInstallStatusFailedDetail": { "placeholders": { "error": { "type": "String" } } }, "flowsInstallDepsAllDone": "Alle Abhängigkeiten installiert.", "flowsInstallDepsAnyFailed": "{ok} installiert, {failed} fehlgeschlagen.", "@flowsInstallDepsAnyFailed": { "placeholders": { "ok": { "type": "int" }, "failed": { "type": "int" } } }, "flowsInstallAuthWallButton": "Registry-Token einfügen", "flowsOpenInEditorTooltip": "Im Studio-Flow-Editor öffnen", "flowsOpenInEditorFailed": "Konnte Datei nicht öffnen: {error}", "@flowsOpenInEditorFailed": { "placeholders": { "error": { "type": "String" } } }, "registryCredentialsHeader": "REGISTRY-ZUGANGSDATEN", "registryCredentialsBlurb": "Token zum Herunterladen von .fai-Modulen aus einer Registry mit Anmeldepflicht (Forgejo, private GitHub-Repos). Gespeichert in ~/.chain/registry-token, Modus 0600. Die Umgebungsvariable CHAIN_REGISTRY_TOKEN hat weiterhin Vorrang, wenn gesetzt.", "registryTokenStatusConfigured": "Konfiguriert ({chars} Zeichen)", "@registryTokenStatusConfigured": { "placeholders": { "chars": { "type": "int" } } }, "registryTokenStatusNotSet": "Nicht gesetzt", "registryTokenFieldLabel": "Token", "registryTokenFieldHint": "Forgejo- oder GitHub-PAT einfügen", "registryTokenSaveButton": "Speichern", "registryTokenClearButton": "Entfernen", "registryTokenStorageHint": "Lokal gespeichert in ~/.chain/registry-token. Wird nie an einen Remote-Dienst übertragen.", "registryTokenSavedToast": "Registry-Token gespeichert.", "registryTokenClearedToast": "Registry-Token entfernt.", "registryTokenSaveFailedToast": "Speichern fehlgeschlagen: {error}", "@registryTokenSaveFailedToast": { "placeholders": { "error": { "type": "String" } } }, "hubAuthTokenHeader": "HUB-AUTHENTIFIZIERUNG", "hubAuthTokenBlurb": "Bearer-Token für die Studio-Anbindung an einen Hub mit aktivierter auth.tokens-Konfiguration (RBAC Level 2). Gespeichert in ~/.chain/hub-auth-token, Modus 0600. Studio sendet ihn als Authorization: Bearer bei jedem gRPC-Aufruf.", "hubAuthTokenStatusConfigured": "Eingerichtet ({chars} Zeichen)", "@hubAuthTokenStatusConfigured": { "placeholders": { "chars": { "type": "int" } } }, "hubAuthTokenStatusNotSet": "Nicht gesetzt (anonym)", "hubAuthTokenFieldLabel": "Token", "hubAuthTokenFieldHint": "Token aus dem auth.tokens-Eintrag des Hub-Operators einfügen", "hubAuthTokenSaveButton": "Speichern", "hubAuthTokenClearButton": "Entfernen", "hubAuthTokenStorageHint": "Lokal gespeichert in ~/.chain/hub-auth-token. Studio verbindet nach dem Speichern automatisch neu, der Token wirkt sofort.", "hubAuthTokenSavedToast": "Hub-Token gespeichert.", "hubAuthTokenClearedToast": "Hub-Token entfernt.", "hubAuthTokenSaveFailedToast": "Speichern fehlgeschlagen: {error}", "@hubAuthTokenSaveFailedToast": { "placeholders": { "error": { "type": "String" } } }, "storeAdvisoryVersionTooltip": "Föderierter Upstream-Dienst — Version ist Richtwert; der Upstream kann ohne Versionsanhebung Kompatibilität brechen.", "uninstallVersionPickerTitle": "Version zum Entfernen wählen", "uninstallVersionPickerBody": "Mehrere Versionen von `{module}` sind parallel installiert. Wähle genau die Version aus, die entfernt werden soll — die anderen bleiben bestehen.", "@uninstallVersionPickerBody": { "placeholders": { "module": { "type": "String" } } }, "uninstallVersionPickerContinue": "Weiter", "defaultScopeHeader": "STANDARD-SCOPE", "defaultScopeBlurb": "Geordnete Liste von Publisher-Segmenten, die der Hub konsultiert, wenn ein Flow eine Capability ohne explizites `/`-Präfix benennt. Erster Treffer gewinnt — die Segmente, die euer Team am häufigsten nutzt, gehören nach oben. Katalog-bekannte Publisher erscheinen als Chips; private Segmente lassen sich frei eintragen.", "defaultScopeAddLabel": "Publisher-Segment hinzufügen", "defaultScopeAddHint": "z.B. acme.team", "defaultScopeAddButton": "Hinzufügen", "defaultScopeSuggestions": "Katalog-Vorschläge:", "defaultScopeSavedToast": "Standard-Scope aktualisiert.", "defaultScopeLoadFailed": "Standard-Scope konnte nicht geladen werden.", "defaultScopeNonEmptyError": "Standard-Scope darf nicht leer sein — mindestens ein Segment muss erhalten bleiben.", "maintenanceHeader": "HUB-WARTUNG", "maintenanceResetBlurb": "Operator-Zustand zurücksetzen und mit einem sauberen Hub neu starten. Stoppt jeden laufenden Daemon, sichert ~/.chain/ atomar in ein Backup, legt es dann neu an — Binary, Channel-Pointer, MCP-/n8n-/System-AI-Konfiguration und Registry-Token bleiben erhalten. Wiederherstellen durch Zurückverschieben des Backup-Ordners.", "maintenanceKeepModulesTitle": "Installierte Module behalten", "maintenanceKeepModulesSubtitle": "Standardverhalten löscht ~/.chain/modules/, damit eine frische Installation den Modul-Bezugspfad end-to-end verifizieren kann.", "maintenanceKeepDataTitle": "Protokoll + gespeicherte Flows behalten", "maintenanceKeepDataSubtitle": "Standardverhalten löscht ~/.chain/data/, damit die Audit-Kette mit einer neuen Genesis startet und die mitgelieferten Sample-Flows beim ersten Daemon-Start neu importiert werden.", "maintenanceResetButton": "Hub zurücksetzen", "maintenanceResetInProgress": "Zurücksetzen…", "maintenanceResetConfirmTitle": "Hub zurücksetzen?", "maintenanceResetConfirmBody": "Stoppt jeden Daemon, verschiebt ~/.chain/ in ein Backup mit Zeitstempel und startet sauber neu. Das Backup ist vollständig wiederherstellbar. Fortfahren?", "maintenanceResetConfirmButton": "Zurücksetzen", "welcomeChecklistAllSetTitle": "Du bist eingerichtet.", "welcomeChecklistAllSetBody": "Drei Stränge, an denen du als nächstes ziehen kannst:", "welcomeChecklistNextAuditTitle": "Audit-Log lesen", "welcomeChecklistNextAuditBody": "Jede Installation, jeder Flow-Lauf, jede Freigabe landet im hash-verketteten Log. Im Protokoll-Tab siehst du, was dein Hub gemacht hat.", "welcomeChecklistNextAuditButton": "Protokoll öffnen", "welcomeChecklistNextTodayTitle": "Daily-Today-Story einrichten", "welcomeChecklistNextTodayBody": "tools/today/propose.sh per Cron laufen lassen und die Editorial-Karte im Store füllt sich mit operator-kuratierten Stories.", "welcomeChecklistNextTodayButton": "Today-Doku öffnen", "welcomeChecklistNextModuleTitle": "Eigenes Modul bauen", "welcomeChecklistNextModuleBody": "Mit `chain new module ` ein Rust+WASM-Scaffold erzeugen. Das module-sdk übernimmt die WIT-Plumbing; du schreibst nur ein typisiertes invoke.", "welcomeChecklistNextModuleButton": "Doku lesen", "auditGroupToday": "HEUTE", "auditGroupYesterday": "GESTERN", "auditGroupThisWeek": "DIESE WOCHE", "auditGroupOlder": "ÄLTER", "auditEventViewFlowRun": "Flow-Lauf ansehen", "auditFlowRunDialogTitle": "Flow-Lauf · {flow}", "@auditFlowRunDialogTitle": { "placeholders": { "flow": { "type": "String" } } }, "auditFlowRunDialogSubtitle": "{n} {n, plural, =1{Ereignis} other{Ereignisse}} für Lauf {execution}", "@auditFlowRunDialogSubtitle": { "placeholders": { "n": { "type": "int" }, "execution": { "type": "String" } } }, "approvalsSelectAll": "Alle wählen", "approvalsClearSelection": "Auswahl aufheben", "approvalsBatchSelected": "{n} ausgewählt", "@approvalsBatchSelected": { "placeholders": { "n": { "type": "int" } } }, "approvalsBatchApprove": "Alle freigeben", "approvalsBatchReject": "Alle ablehnen", "approvalsBatchApproveDoneToast": "{n} Freigaben erteilt.", "@approvalsBatchApproveDoneToast": { "placeholders": { "n": { "type": "int" } } }, "approvalsBatchRejectDoneToast": "{n} Freigaben abgelehnt.", "@approvalsBatchRejectDoneToast": { "placeholders": { "n": { "type": "int" } } }, "approvalsBatchPartialFailure": "{ok} erledigt, {failed} fehlgeschlagen.", "@approvalsBatchPartialFailure": { "placeholders": { "ok": { "type": "int" }, "failed": { "type": "int" } } }, "flowsRunButton": "Starten", "flowsRunningTitle": "{name} läuft", "@flowsRunningTitle": { "placeholders": { "name": { "type": "String" } } }, "flowsResultTitle": "{name} — Ergebnis", "@flowsResultTitle": { "placeholders": { "name": { "type": "String" } } }, "flowsErrorTitle": "{name} — fehlgeschlagen", "@flowsErrorTitle": { "placeholders": { "name": { "type": "String" } } }, "flowsRunning": "Flow läuft…", "flowsNoOutputs": "Flow abgeschlossen ohne deklarierte Outputs.", "errGeneric": "Da ist etwas schiefgegangen.", "errInvalidArgument": "Ungültige Eingabe.", "errInvalidArgumentHint": "Werte im Formular prüfen und erneut versuchen.", "errNotFound": "Nicht gefunden.", "errNotFoundHint": "Das Angefragte ist nicht hier — entweder entfernt oder nie existiert.", "errAlreadyExists": "Existiert bereits.", "errPermissionDenied": "Berechtigung verweigert.", "errPermissionDeniedHint": "Die Operator-Policy des Hubs blockiert diese Aktion. `~/.chain/config.yaml` prüfen.", "errFailedPrecondition": "Setup-Problem hat das blockiert.", "errFailedPreconditionHint": "Der Hub konnte nicht weiter, weil etwas Vorausgesetztes fehlt. Details unten erklären was.", "errInternal": "Unerwarteter interner Fehler.", "errInternalHint": "Hub-Logs unter `~/.chain/logs/` prüfen. Wenn das öfter passiert, bitte melden.", "errUnavailable": "Hub nicht erreichbar.", "errUnavailableHint": "Sicherstellen, dass `chain serve` (oder `chain daemon start`) läuft und der Daemon-Endpunkt zu Studios Einstellungen passt.", "errUnauthenticated": "Authentifizierung erforderlich.", "errUnauthenticatedHint": "`CHAIN_REGISTRY_TOKEN` setzen oder in den Einstellungen anmelden, dann erneut versuchen.", "errCopyDetail": "Detail kopieren", "errDetailCopied": "Detail in die Zwischenablage kopiert.", "flowsOutputUnknown": "Unbekannter Output-Payload-Typ.", "flowsOutputBytesUnknownMime": "Binärdaten", "flowsOutputSaveAs": "Speichern unter…", "flowsOutputSaveAsTitle": "Flow-Output speichern", "flowsOutputSavedAt": "Gespeichert: {path}", "@flowsOutputSavedAt": { "placeholders": { "path": { "type": "String" } } }, "flowsOutputSaveFailed": "Speichern fehlgeschlagen: {error}", "@flowsOutputSaveFailed": { "placeholders": { "error": { "type": "String" } } }, "flowsOutputOpen": "Öffnen", "flowsOutputOpenFailed": "Öffnen fehlgeschlagen: {error}", "@flowsOutputOpenFailed": { "placeholders": { "error": { "type": "String" } } }, "approvalsTitle": "Freigaben", "approvalsTabPending": "Offen", "approvalsTabHistory": "Verlauf", "approvalsInboxZero": "Posteingang leer", "approvalsInboxHint": "Alles erledigt. Neue `system.approval@^0`-Schritte landen automatisch hier.", "approvalsReloadTooltip": "Aktualisieren", "approvalsPillPending": "offen", "approvalsPillApproved": "freigegeben", "approvalsPillRejected": "abgelehnt", "approvalsPillExpired": "abgelaufen", "approvalsPayloadPreview": "DIESE DATEN WERDEN FREIGEGEBEN", "approvalsRequestFallback": "Freigabe für diesen Schritt erforderlich", "approvalsFlowStepMeta": "Flow: {flow} · Schritt: {step}", "approvalsApproveButton": "Freigeben", "approvalsRejectButton": "Ablehnen", "approvalsRejectDialogTitle": "Freigabe ablehnen", "approvalsRejectReasonLabel": "Begründung (im Audit-Log festgehalten)", "approvalsApprovedToast": "freigegeben · {flow} › {step}", "@approvalsApprovedToast": { "placeholders": { "flow": { "type": "String" }, "step": { "type": "String" } } }, "approvalsRejectedToast": "abgelehnt · {flow} › {step}", "@approvalsRejectedToast": { "placeholders": { "flow": { "type": "String" }, "step": { "type": "String" } } }, "approvalsApproveFailed": "Freigabe fehlgeschlagen: {error}", "@approvalsApproveFailed": { "placeholders": { "error": { "type": "String" } } }, "approvalsRejectFailed": "Ablehnung fehlgeschlagen: {error}", "@approvalsRejectFailed": { "placeholders": { "error": { "type": "String" } } }, "approvalsHistoryEmpty": "Noch kein Verlauf", "approvalsHistoryEmptyHint": "Entschiedene Freigaben (freigegeben / abgelehnt / abgelaufen) erscheinen hier.\nDas Audit-Log enthält den vollständigen hash-verketteten Datensatz.", "approvalsDialogDecided": "entschieden", "approvalsDialogCreated": "erstellt", "approvalsDialogReason": "Begründung", "approvalsDialogPrompt": "PROMPT", "approvalsExpiresIn": "{minutes}m", "@approvalsExpiresIn": { "placeholders": { "minutes": { "type": "int" } } }, "approvalsExpiresInHours": "{hours}h", "@approvalsExpiresInHours": { "placeholders": { "hours": { "type": "int" } } }, "doctorTitle": "Diagnose", "doctorSummaryModules": "Module", "doctorSummaryApprovals": "Freigaben", "doctorSummaryAudit": "Protokoll", "doctorSummaryServices": "Dienste", "doctorSummaryCapabilities": "{n} Fähigkeiten", "@doctorSummaryCapabilities": { "placeholders": { "n": { "type": "int" } } }, "doctorSummaryPending": "offen", "doctorSummaryChain": "{verified}/{total} Kette", "@doctorSummaryChain": { "placeholders": { "verified": { "type": "int" }, "total": { "type": "int" } } }, "doctorSummaryDeclared": "deklariert", "doctorModulesPanelSummary": "{n} Module · {m} Fähigkeiten", "@doctorModulesPanelSummary": { "placeholders": { "n": { "type": "int" }, "m": { "type": "int" } } }, "doctorApprovalsNone": "Keine offenen Freigaben", "doctorApprovalsCount": "{n, plural, =1{1 Freigabe wartet auf Prüfung} other{{n} Freigaben warten auf Prüfung}}", "@doctorApprovalsCount": { "placeholders": { "n": { "type": "int" } } }, "doctorApprovalsAttentionPill": "wichtig", "doctorServicesEmpty": "Keine Host-Dienste deklariert", "doctorServicesEmptyHint": "in ~/.chain/config.yaml unter services: hinzufügen", "doctorPillLoaded": "geladen", "doctorPillEmpty": "leer", "doctorRecheckTooltip": "Erneut prüfen", "doctorEventLogSection": "Audit-Log", "doctorModulesApprovalsSection": "Module & Freigaben", "doctorHostServicesSection": "Host-Dienste", "doctorDaemonFilesSection": "Daemon-Dateien", "doctorDaemonControlSection": "Daemon-Steuerung", "doctorChainIntact": "Hash-Kette intakt", "doctorChainIntactDetail": "{n} Ereignisse · prev_event_sha256 lückenlos verifiziert", "@doctorChainIntactDetail": { "placeholders": { "n": { "type": "int" } } }, "doctorChainTampered": "Manipulation erkannt", "doctorChainTamperedDetail": "{verified} von {total} verifiziert vor Mismatch bei {id}", "@doctorChainTamperedDetail": { "placeholders": { "verified": { "type": "int" }, "total": { "type": "int" }, "id": { "type": "String" } } }, "doctorChainPillOk": "WORM-1", "doctorChainPillTamper": "MANIPULIERT", "doctorVerifyNow": "Jetzt prüfen", "doctorRestart": "Neustart", "doctorStart": "Starten", "doctorStop": "Stoppen", "doctorStatusAction": "Status", "doctorRunningOn": "Läuft auf {name}: {endpoint}", "@doctorRunningOn": { "placeholders": { "name": { "type": "String" }, "endpoint": { "type": "String" } } }, "doctorStoppedOn": "{name}-Daemon gestoppt", "@doctorStoppedOn": { "placeholders": { "name": { "type": "String" } } }, "doctorStatusUnknown": "Daemon-Status: …", "doctorPillRunning": "läuft", "doctorPillStopped": "gestoppt", "doctorDaemonControlHint": "Studio ruft das Platform-Binary auf — entspricht `chain daemon …`, sodass CLI und UI im Gleichschritt bleiben.", "doctorDaemonControlWorking": "Wird ausgeführt…", "doctorPathLog": "Log", "doctorPathConfig": "Konfig", "doctorPathDb": "Audit-DB", "doctorPathModules": "Module-Verzeichnis", "doctorPathFlows": "Flow-Verzeichnis", "doctorPathPid": "PID-Datei", "doctorPathsEmpty": "Daemon hat keine Datei-Pfade gemeldet. Hub aktualisieren via `chain daemon restart`.", "doctorOpenError": "Konnte nicht öffnen: {detail}", "@doctorOpenError": { "placeholders": { "detail": { "type": "String" } } }, "doctorUpdateAvailable": "Update verfügbar — {version}", "@doctorUpdateAvailable": { "placeholders": { "version": { "type": "String" } } }, "doctorUpdateBody": "Kanal {channel} bietet jetzt {version}. Per Button anwenden — Studio ruft `chain update apply --channel {channel}` auf.", "@doctorUpdateBody": { "placeholders": { "channel": { "type": "String" }, "version": { "type": "String" } } }, "doctorUpdateUnreachable": "Release-Host nicht erreichbar", "doctorUpdateUnreachableBody": "Release-Feed für {channel} konnte nicht erreicht werden.", "@doctorUpdateUnreachableBody": { "placeholders": { "channel": { "type": "String" } } }, "doctorReleaseNotes": "Notes: {url}", "@doctorReleaseNotes": { "placeholders": { "url": { "type": "String" } } }, "doctorPillNew": "neu", "doctorPillOffline": "offline", "doctorApplyUpdate": "Update anwenden", "doctorApplying": "Wird angewendet…", "doctorApplyDone": "Update angewendet. Studio neu starten, um die neue Daemon-Version zu sehen.", "mcpHeader": "MCP-CLIENTS", "mcpHint": "Externe MCP-Server bringen ihre Tools als `mcp..` Fähigkeiten ein. Einmal konfigurieren, im Store sichtbar.", "mcpEmpty": "Keine MCP-Server konfiguriert. + klicken zum Hinzufügen.", "n8nHeader": "N8N-ENDPUNKTE", "n8nHint": "Aktive n8n-Workflows erscheinen als `n8n..` Fähigkeiten. Einmal konfigurieren, im Store sichtbar.", "n8nEmpty": "Keine n8n-Endpunkte konfiguriert. + klicken zum Hinzufügen.", "hubUnreachable": "Hub nicht erreichbar", "hubUnreachableHint": "Hub starten mit `chain serve`.", "languageEnglish": "English", "languageGerman": "Deutsch", "searchHint": "Springe überall hin — Module, Store, Flows, Seiten…", "searchIndexing": "Indiziere…", "searchNoMatches": "Keine Treffer.", "searchHintNavigate": "↑↓ navigieren", "searchHintOpen": "Enter öffnen", "searchHintClose": "Esc schließen", "searchGroupPages": "Seiten", "searchGroupModules": "Module", "searchGroupStore": "Store", "searchGroupFlows": "Flows", "searchSettingsLabel": "Einstellungen", "searchPageHint": "Seite · ⌘{n}", "@searchPageHint": { "placeholders": { "n": { "type": "int" } } }, "searchSettingsHint": "Hub-Endpunkt, Kanäle, System-AI · ⌘;", "searchInstalledModuleHint": "installiertes Modul · v{version}", "@searchInstalledModuleHint": { "placeholders": { "version": { "type": "String" } } }, "searchStoreUncategorized": "ohne Kategorie", "searchStoreHintWithTagline": "Store · {tagline}", "@searchStoreHintWithTagline": { "placeholders": { "tagline": { "type": "String" } } }, "searchStoreHintWithCategory": "Store · {category}", "@searchStoreHintWithCategory": { "placeholders": { "category": { "type": "String" } } }, "searchSavedFlowHint": "gespeicherter Flow", "systemAiTitle": "System-AI", "systemAiIntro": "Die hub-interne LLM, die die Plattform selbst für Fehlererklärungen und Operator-Hilfe nutzt. Standardmäßig aus; hier konfigurieren. Siehe docs/architecture/system-ai.md, was über die Leitung geht.", "systemAiProviderLabel": "Provider", "systemAiEndpointLabel": "Endpunkt-URL (bis /v1)", "systemAiApiKeyRequired": "API-Key-Umgebungsvariable (erforderlich)", "systemAiApiKeyOptional": "API-Key-Umgebungsvariable (optional)", "systemAiApiKeyDisclaimer": "Studio liest oder speichert den Key-Wert nie — nur den Namen der Umgebungsvariable. Der Hub liest `${name}` zur Anfragezeit.", "@systemAiApiKeyDisclaimer": { "placeholders": { "name": { "type": "String" } } }, "systemAiTestConnection": "Verbindung testen", "systemAiTesting": "Teste…", "systemAiSave": "Speichern", "systemAiPrivacyHeader": "PRIVACY-MODUS", "systemAiPrivacyOffLabel": "Aus", "systemAiPrivacyOffDesc": "Feature deaktiviert. Keine Anfragen verlassen den Hub.", "systemAiPrivacyRedactedLabel": "Redigiert", "systemAiPrivacyRedactedDesc": "Nur event_type / error / Modul-Namen. KRITIS-freundlicher Standard.", "systemAiPrivacyFullLabel": "Voll", "systemAiPrivacyFullDesc": "Enthält das Audit-Detail-JSON (nur Hash — keine Roh-Payloads).", "systemAiConnectionOk": "Verbindung ok", "systemAiConnectionFailed": "Verbindung fehlgeschlagen", "systemAiReplyPrefix": "Antwort: {text}", "@systemAiReplyPrefix": { "placeholders": { "text": { "type": "String" } } }, "systemAiModelLabel": "Modell (erforderlich)", "systemAiModelHintFallback": "Modell-Identifier, den der Provider erwartet", "systemAiModelHelperBase": "Erforderlich: aus der Liste auswählen (Aktualisieren) oder eintippen.", "systemAiModelHelperOllama": "Erforderlich: aus der Liste auswählen (Aktualisieren) oder eintippen. Mit Pull von Ollama herunterladen.", "systemAiRefresh": "Aktualisieren", "systemAiPull": "Pull", "systemAiPulling": "Lade…", "systemAiCouldNotListModels": "Modelle konnten nicht aufgelistet werden: {error}", "@systemAiCouldNotListModels": { "placeholders": { "error": { "type": "String" } } }, "systemAiNoModelsOllama": "Noch keine Modelle auf dem Ollama-Server. Oben eintippen und Pull klicken.", "systemAiNoModelsGeneric": "Provider lieferte keine Modelle.", "systemAiSuitabilityRecommended": "empfohlen", "systemAiSuitabilityBalanced": "ausgewogen", "systemAiSuitabilitySmall": "klein — Qualität evtl. eingeschränkt", "systemAiSuitabilityLarge": "groß — langsamer", "systemAiSuitabilityHuge": "sehr groß — auf einem Laptop wahrscheinlich zu langsam", "systemAiSuitabilityUnknown": "Größe unbekannt", "systemAiHwDetected": "Erkannt: {summary}", "@systemAiHwDetected": { "placeholders": { "summary": { "type": "String" } } }, "systemAiHwReviewed": " · Kuratierung geprüft {date}", "@systemAiHwReviewed": { "placeholders": { "date": { "type": "String" } } }, "systemAiLegendRecommended": "empfohlen für diese Hardware{tier}", "@systemAiLegendRecommended": { "placeholders": { "tier": { "type": "String" } } }, "systemAiLegendBalanced": "ausgewogen (4-8B)", "systemAiLegendSmallLarge": "klein <3B / groß 9-15B / über Hardware", "systemAiLegendHuge": "sehr groß >15B", "systemAiLegendUnknown": "Größe unbekannt", "systemAiCacheRow": "Cache: {n} {n, plural, =1{gespeicherte Erklärung} other{gespeicherte Erklärungen}}. Identische Prompts treffen den Cache; Modell- oder Privacy-Modus-Wechsel leeren ihn automatisch.", "@systemAiCacheRow": { "placeholders": { "n": { "type": "int" } } }, "systemAiCacheClear": "Leeren", "systemAiCacheClearedToast": "{n} gespeicherte System-AI-Erklärungen gelöscht.", "@systemAiCacheClearedToast": { "placeholders": { "n": { "type": "int" } } }, "systemAiCacheClearFailed": "Cache-Löschen fehlgeschlagen: {error}", "@systemAiCacheClearFailed": { "placeholders": { "error": { "type": "String" } } }, "systemAiPullEmptyError": "Erst eine Modell-ID eintippen (z.B. gemma3:4b).", "systemAiPullFailedError": "Pull fehlgeschlagen: {error}", "@systemAiPullFailedError": { "placeholders": { "error": { "type": "String" } } }, "storeProvenanceTemporal": "temporal · {provider}", "@storeProvenanceTemporal": { "placeholders": { "provider": { "type": "String" } } }, "storeSourceTemporal": "Temporal", "navFlowEditor": "Editor", "flowEditorBackTooltip": "Zurück", "flowEditorNew": "Neuer Flow", "flowEditorSave": "Speichern", "flowEditorRun": "Ausführen", "flowEditorRefresh": "Datei-Liste neu laden", "flowEditorRunOutput": "LAUF-ERGEBNIS", "flowEditorEmptyTitle": "Kein Flow geöffnet", "flowEditorEmptyBody": "Wähle links einen aus oder klicke Neuer Flow um einen neuen anzulegen.", "flowEditorListEmptyTitle": "Keine gespeicherten Flows", "flowEditorListEmptyBody": "Klicke Neuer Flow um aus einer Vorlage zu starten.", "flowEditorDiscardTitle": "Ungespeicherte Änderungen verwerfen?", "flowEditorDiscardBody": "Beim Wechsel der Datei gehen alle noch nicht gespeicherten Änderungen verloren.", "flowEditorDiscardKeep": "Weiterbearbeiten", "flowEditorDiscardThrow": "Verwerfen", "flowEditorNewDialogTitle": "Neuer Flow", "flowEditorNewDialogLabel": "Flow-Name", "flowEditorNewDialogHelper": "Kleinbuchstaben, Ziffern, Bindestrich, Unterstrich", "flowEditorNewDialogCancel": "Abbrechen", "flowEditorNewDialogCreate": "Anlegen", "flowEditorNewTemplateComment": "Von Studios Flow-Editor erstellt. Bearbeiten, speichern, ausführen.", "@flowEditorNewTemplateComment": { "placeholders": { "name": {"type": "String"} } }, "flowEditorAlreadyExists": "Ein Flow namens \"{name}\" existiert bereits.", "@flowEditorAlreadyExists": { "placeholders": { "name": {"type": "String"} } }, "buttonView": "Ansehen", "logViewerTitle": "{title} — letzte {count} Zeilen", "@logViewerTitle": { "placeholders": { "title": {"type": "String"}, "count": {"type": "int"} } }, "logViewerEmpty": "Log-Datei ist leer oder existiert noch nicht.", "logViewerCopyAll": "Alles kopieren", "logViewerOpenExternal": "Im Standardeditor öffnen", "logViewerLineCount": "{count, plural, =1{1 Zeile} other{{count} Zeilen}}", "@logViewerLineCount": { "placeholders": { "count": {"type": "int"} } }, "doctorPathStudioErrors": "Studio-Fehler", "settingsCategoryGeneral": "Allgemein", "settingsCategoryAppearance": "Darstellung", "settingsCategoryAi": "System-KI", "settingsCategoryIntegrations": "Integrationen", "settingsCategorySecurity": "Sicherheit", "settingsCategoryMaintenance": "Wartung", "settingsAiPanelTitle": "System-KI", "settingsAiPanelBody": "Operator-verwalteter LLM-Endpunkt, den Studio für die KI-Helfer nutzt (System-KI-Edit, Install-Vorschläge, Doctor-Zusammenfassung). Kein Flow ruft das jemals auf; Module sprechen mit ihrem eigenen LLM.", "settingsIntegrationsPanelTitle": "Integrationen", "settingsIntegrationsPanelBody": "Externe Tool-Server, deren Capabilities der Hub föderiert. MCP-Server bieten Tool-Endpunkte; n8n-Endpunkte stellen gehostete Workflows bereit.", "settingsSecurityPanelTitle": "Sicherheit & Zugangsdaten", "settingsSecurityPanelBody": "Tokens, die der Hub für dich verwahrt. Liegen in ~/.chain/ mit Modus 0600; werden nie als Telemetrie versendet.", "settingsMaintenancePanelTitle": "Wartung", "settingsMaintenancePanelBody": "Destruktive Aktionen, abgesichert durch explizite Bestätigungs-Dialoge. Nutzen z.B. beim Re-Pilot-Testen oder Debuggen.", "tooltipMoveUp": "Nach oben", "tooltipMoveDown": "Nach unten", "tooltipRemove": "Entfernen", "daemonActionEnableAutostart": "Autostart aktivieren", "daemonActionDisableAutostart": "Autostart deaktivieren", "daemonActionRestart": "Daemon neu starten", "daemonActionStart": "Daemon starten", "daemonActionStop": "Daemon stoppen", "daemonActionStatus": "Daemon-Status", "daemonActionResultOk": "OK · {label}", "@daemonActionResultOk": { "placeholders": { "label": {"type": "String"} } }, "daemonActionResultFailed": "Fehlgeschlagen · {label}", "@daemonActionResultFailed": { "placeholders": { "label": {"type": "String"} } }, "addSourceTitle": "Modul-Quelle hinzufügen", "addSourceIntro": "`{capability}` ist nicht im öffentlichen Store. Zeig dem Hub eine `.fai`-Bundle-URL oder einen lokalen Bundle-Pfad — der Hub lädt es herunter, prüft (sha256 + Signatur) und installiert.", "@addSourceIntro": { "placeholders": { "capability": {"type": "String"} } }, "addSourceField": "URL oder Pfad zum .fai-Bundle", "addSourceHint": "https://git.flemming.ai/deine-org/dein-modul/releases/download/v0.1.0/foo-0.1.0.fai", "addSourceHowItWorksTitle": "Wie private Module funktionieren", "addSourceHowItWorksBody": "Ein Modul ist ein Verzeichnis mit module.yaml + WASM-Artefakt. Zum Teilen: `chain pack ` baut ein `.fai`-Bundle, das du beliebig hosten kannst (eigene Forgejo / GitHub / S3). Der Hub installiert per URL und prüft die Signatur gegen seinen Trust-Store.\n\nLokal entwickeln? Nimm das CLI — Studio installiert (noch) nicht aus einem unverpackten Verzeichnis:", "addSourceCliExample": "chain install --link /pfad/zum/modul", "addSourceInstallButton": "Installieren", "addSourceCancel": "Abbrechen", "installFailed": "Installation fehlgeschlagen: {error}", "@installFailed": { "placeholders": { "error": {"type": "String"} } }, "welcomeHubDownTitle": "Der Hub läuft noch nicht", "welcomeHubDownBody": "Studio spricht mit einem lokalen Hub — der Engine, die Module lädt und Flows ausführt. Sie ist gerade nicht erreichbar. Starte sie, um loszulegen.", "welcomeHubDownStart": "Hub starten", "welcomeHubDownStarting": "Wird gestartet …", "welcomeHubDownDocsLink": "Klappt der Start nicht? Zur Erste-Schritte-Anleitung", "welcomeHubDownEndpoint": "Endpunkt: {endpoint}", "@welcomeHubDownEndpoint": { "placeholders": { "endpoint": {"type": "String"} } }, "daemonStartRequested": "Start des Daemons angefordert. Verbinde neu …", "daemonStartFailed": "Daemon konnte nicht gestartet werden: {detail}", "@daemonStartFailed": { "placeholders": { "detail": {"type": "String"} } }, "chainBinaryNotFound": "Das Programm `chain` wurde auf diesem Rechner nicht gefunden.", "chainBinaryNotFoundHint": "Installiere die Ch∆In-Plattform oder verweise Studio auf eine vorhandene `chain`-Datei.", "chainBinaryLocateButton": "`chain`-Programm suchen …", "chainBinaryInstallDocsButton": "Installationsanleitung öffnen", "chainBinaryPickerTitle": "`chain`-Programm auswählen", "chainBinarySetOk": "Verwende `chain` unter {path}", "@chainBinarySetOk": { "placeholders": { "path": {"type": "String"} } }, "sysAiFixParse": "Der Anbieter hat in einem unerwarteten Format geantwortet. Anbieter, die nicht OpenAI-kompatibel sind, brauchen ggf. einen Übersetzungs-Proxy.", "sysAiFixUnknown": "Unerwarteter Fehler ({kind}). Siehe System-KI-Dokumentation.", "@sysAiFixUnknown": { "placeholders": { "kind": {"type": "String"} } }, "sysAiFixDisabled": "Richte die System-KI in den Einstellungen (Cmd+,) → Bereich System-KI ein.", "sysAiFixEnvMissing": "Die Umgebungsvariable für den API-Schlüssel ist leer. Setze sie in deiner Shell und starte den Daemon neu.", "sysAiFixNetwork": "Der Hub erreicht den konfigurierten Endpunkt nicht. Läuft dein Anbieter?", "sysAiFixHttp": "Der Anbieter hat einen Status außerhalb 2xx geliefert. Prüfe Endpunkt, Modellname und API-Schlüssel.", "sysAiFixEmptyResponse": "Der Anbieter hat keinen Inhalt geliefert. Probiere ein anderes Modell oder formuliere den Prompt um.", "channelSwitchOk": "Aktiver Kanal auf \"{name}\" umgeschaltet. Daemon neu gestartet.", "@channelSwitchOk": { "placeholders": { "name": {"type": "String"} } }, "channelSwitchFailed": "Kanalwechsel fehlgeschlagen: {detail}", "@channelSwitchFailed": { "placeholders": { "detail": {"type": "String"} } }, "providerDescOllama": "Lokales `ollama serve`. Die Modelle bleiben auf deinem Rechner. Kein API-Schlüssel nötig.", "providerDescOpenai": "Gehostete OpenAI-API. Erfordert einen API-Schlüssel. Daten verlassen deinen Rechner.", "providerDescLmstudio": "Lokaler LM-Studio-Server. Die Modelle bleiben auf deinem Rechner. Kein API-Schlüssel nötig.", "providerDescVllm": "Selbst gehostetes vLLM oder ein anderer OpenAI-kompatibler Server. Endpunkt erforderlich.", "providerDescCustom": "Alles andere, das die OpenAI-kompatible Chat-Completions-Schnittstelle spricht (LiteLLM-Proxy, interner Spiegel, …).", "welcomeDocLoadFailedBody": "Die mitgelieferte Doku \"{slug}\" ({locale}) konnte nicht geladen werden.\nVersucht: {attempted}\nUrsache: {underlying}\nMeist ist der installierte Studio-Build älter als das Doku-Bundle. Baue Studio neu oder öffne die Online-Kopie.", "@welcomeDocLoadFailedBody": { "placeholders": { "slug": {"type": "String"}, "locale": {"type": "String"}, "attempted": {"type": "String"}, "underlying": {"type": "String"} } }, "hubUnreachableBanner": "{endpoint} nicht erreichbar — Einstellungen öffnen", "@hubUnreachableBanner": { "placeholders": { "endpoint": {"type": "String"} } }, "hubUnreachableOpenSettings": "Einstellungen öffnen", "navFederation": "Föderation", "federationTitle": "Föderation", "federationReloadTooltip": "Satelliten neu laden", "federationAddSatellite": "Satellit hinzufügen", "federationEmptyTitle": "Keine Satelliten verbunden", "federationEmptyHint": "Verbinde einen weiteren Hub als Satellit, um Capabilities dort auszuführen. Stelle dazu ein Enrollment-Token aus.", "federationPillConnected": "verbunden", "federationRegionNone": "keine Region", "federationCapabilities": "{count} angebotene Capabilities", "federationAddDialogTitle": "Enrollment-Token ausstellen", "federationNameLabel": "Satelliten-Name", "federationIssueButton": "Ausstellen", "federationIssueFailed": "Token konnte nicht ausgestellt werden: {error}", "federationEnrollmentTitle": "{name} einrichten", "federationTokenLabel": "Bootstrap-Token (einmalig)", "federationConfigLabel": "Satelliten-Konfiguration (in den Satelliten einfügen)", "federationCopied": "In die Zwischenablage kopiert", "federationEnrollmentHint": "Übergib das Token dem Satelliten-Betreiber über einen sicheren Kanal. Die mitgelieferte CA macht den ersten Connect des Satelliten manipulationssicher." }