Some checks failed
Security / Security check (push) Failing after 1s
The menu so far only exported the current view (type + search filter over the page 100-event window). A second action now fetches the complete event history of the active project scope in one EventLog call (the RPC has no cursor and no server-side cap) and writes it as JSONL. Serialisation extracted to a top-level function with unit tests; a stale comment advertising the never-shipped "chain audit export" command now names "chain admin events --json". Studio 0.73.0. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
1920 lines
87 KiB
Text
1920 lines
87 KiB
Text
{
|
||
"@@locale": "de",
|
||
"errModuleDownload": "Modul-Download fehlgeschlagen",
|
||
"errModuleDownloadHint": "Die Bundle-URL des Moduls ist nicht erreichbar (Statuscode unten). Der Hub läuft — URL/Host korrigieren oder anderen Store wählen.",
|
||
"storeFromSource": "aus {store}",
|
||
"guidedSetupTitle": "Setup-Assistent",
|
||
"guidedSetupIntro": "Beantworten Sie drei Fragen — Ch∆In stellt passende Konfiguration, Modul-Set und Beispiel-Flow zusammen.",
|
||
"guidedSetupScenario": "Szenario",
|
||
"guidedSetupIntent": "Aufgabe",
|
||
"guidedSetupTarget": "Wo läuft es?",
|
||
"guidedSetupApproval": "Menschlichen Freigabe-Schritt vor dem KI-Schritt verlangen",
|
||
"guidedSetupDataLocal": "Daten müssen lokal bleiben (air-gapped)",
|
||
"guidedSetupReviewHeading": "Diesen Plan wird Ch∆In anwenden:",
|
||
"guidedSetupApply": "Setup übernehmen",
|
||
"guidedSetupApplied": "Setup übernommen. Schließe mit den Schritten unten ab:",
|
||
"guidedSetupBack": "Zurück",
|
||
"guidedSetupNext": "Weiter",
|
||
"guidedSetupCancel": "Abbrechen",
|
||
"guidedSetupClose": "Schließen",
|
||
"appTitle": "Ch∆In Studio",
|
||
"navWelcome": "Willkommen",
|
||
"welcomeHeroTitle": "Ch∆In Platform",
|
||
"welcomeHeroSubtitle": "Deterministische Workflow-Engine für KI-gestützte Datenverarbeitung in regulierten Umgebungen.",
|
||
"welcomePillarHubTitle": "Hub",
|
||
"welcomePillarHubBody": "Das Programm, das alles ausführt. Es läuft direkt auf Ihrem Rechner, braucht keine Zusatzsoftware und speichert alles Wichtige in einer einzigen Datei.",
|
||
"welcomePillarHubTech": "Ein Rust-Binary, das Module lädt und Flows ausführt. SQLite für den Zustand. Kein Docker, kein Message-Broker, keine Hintergrunddienste, die gepflegt werden müssen.",
|
||
"welcomePillarModuleTitle": "Modul",
|
||
"welcomePillarModuleBody": "Ein Baustein, der genau eine Aufgabe erledigt — zum Beispiel Text aus Dokumenten lesen. Jedes Modul sagt vorab, worauf es zugreifen will; mehr erlaubt der Hub nicht.",
|
||
"welcomePillarModuleTech": "Eine kleine WebAssembly-Komponente in einer Sandbox. Deklariert Netzwerk-Endpunkte, Dateien und Umgebungsvariablen, auf die sie zugreift; der Hub setzt die Liste durch.",
|
||
"welcomePillarFlowTitle": "Flow",
|
||
"welcomePillarFlowBody": "Ein Ablaufplan, der Module zu festen Schritten verbindet. Eingaben rein, Schritte laufen der Reihe nach, Ergebnis raus — und jeder Schritt wird fälschungssicher protokolliert.",
|
||
"welcomePillarFlowTech": "Eine YAML-Datei, die Module verkettet; jeder Schritt wird in einem hash-verketteten Audit-Log festgehalten, das die Diagnose-Seite komplett verifiziert.",
|
||
"welcomePillarTechToggle": "Für Technik-Interessierte",
|
||
"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": "Manipulationserkennendes 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": "Manipulationserkennendes Audit-Log",
|
||
"welcomeDocAuditBlurb": "Wie die Hash-Kette nachträgliche Änderungen erkennbar macht — und was die Integritätsstufe WORM-1 leistet (und was nicht).",
|
||
"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. Tragen Sie 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 klicken Sie 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. Die Liste zeigt den Live-Zustand — nach einer Änderung oben rechts aktualisieren.",
|
||
"welcomeChecklistAi": "System-KI konfigurieren",
|
||
"welcomeChecklistAiHint": "Einstellungen → System-KI. Wird für die KI-Suche und Fehlererklärungen gebraucht.",
|
||
"welcomeChecklistMcp": "Öffentlichen Werkzeug-Katalog verbinden",
|
||
"welcomeChecklistMcpHint": "Verbindet einen öffentlichen Werkzeug-Katalog (Fachbegriff: MCP) — dessen Fähigkeiten erscheinen dann im Store. Dort hinzufügen oder unter Einstellungen → MCP-Clients.",
|
||
"welcomeChecklistModule": "Ein Text-Modul installieren",
|
||
"welcomeChecklistModuleHint": "Im Store ein Modul aus der Kategorie Ihrer Wahl installieren. Module sind isolierte (sandboxed) Ch∆In-Komponenten.",
|
||
"welcomeChecklistFlow": "Einen gespeicherten Flow starten",
|
||
"welcomeChecklistFlowHint": "Flows → einen wählen → Starten. Studio bringt einige Demo-Flows mit; ein eigener funktioniert genauso.",
|
||
"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 Endpunkt 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. Klicken Sie auf 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.<name>.<tool>-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.<name>.<workflow_slug>-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 brauchen Sie? Zum Beispiel „ein Modul, das tabellarische Daten liest\" — oder geben Sie einfach einen Begriff ein.",
|
||
"storeAskSubmit": "Suchen",
|
||
"storeAskAi": "KI fragen",
|
||
"storeAskClear": "Frage zurücksetzen",
|
||
"storeAskAiThinking": "Module werden durchsucht…",
|
||
"storeAskAiUnavailable": "Konfigurieren Sie 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",
|
||
"storeStatusAlphaHelp": "Frühe Version: läuft, wird aber noch weiterentwickelt und ist nicht für den regulierten Produktivbetrieb freigegeben.",
|
||
"storeStatusPublishedHelp": "Vom Herausgeber für den allgemeinen Einsatz freigegeben.",
|
||
"storeStatusPlannedHelp": "Angekündigt, aber noch nicht verfügbar.",
|
||
"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",
|
||
"storeCategoryDocument": "Dokument",
|
||
"storeCatDocuments": "Dokumente",
|
||
"storeCatTextLanguage": "Text & Sprache",
|
||
"storeCatData": "Daten & Formate",
|
||
"storeCatAiLlm": "KI & LLM",
|
||
"storeCatWebApi": "Web & APIs",
|
||
"storeCatAnalysisDomain": "Analyse & Domäne",
|
||
"storeCatStudioThemes": "Studio & Designs",
|
||
"storeCatExamplesDev": "Beispiele & Dev",
|
||
"storeCatOther": "Sonstiges",
|
||
"storeSegmentModules": "Module",
|
||
"storeSegmentStudio": "Studio & Designs",
|
||
"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ügen Sie 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",
|
||
"storesManagerPinnedKeyLabel": "Signatur-Schlüssel anheften (PEM, optional)",
|
||
"storesManagerPinnedKeyHint": "Nur Module, die mit diesem Schlüssel signiert sind, werden aus dieser Quelle angenommen. Fügen Sie den öffentlichen Schlüssel (PEM) des Herausgebers ein — statt des eingebauten Herstellerschlüssels.",
|
||
"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",
|
||
"storeFeaturedBadge": "EMPFOHLEN",
|
||
"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. Setzen Sie CHAIN_REGISTRY_TOKEN in der Umgebung des Daemons und starten Sie 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. Öffnen Sie 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": "Starten Sie einen Flow, um den Audit-Stream zu füllen.\nEreignisse erscheinen innerhalb von Sekunden.",
|
||
"auditFilterAll": "Alle",
|
||
"auditFilterFlow": "Flow",
|
||
"auditFilterStep": "Schritt",
|
||
"auditFilterModule": "Modul",
|
||
"auditFilterTooltip": "Ereignisse filtern",
|
||
"auditClearLogTooltip": "Protokoll löschen (nur local/dev Kanal)",
|
||
"auditMoreTooltip": "Weitere Aktionen",
|
||
"auditSearchHint": "Ereignisse durchsuchen (Flow, Schritt, Modul, Fehlertext …)",
|
||
"auditExportAction": "Aktuelle Ansicht als JSONL exportieren …",
|
||
"auditExportAllAction": "Vollständiges Protokoll als JSONL exportieren …",
|
||
"auditExportAllNothing": "Das Protokoll ist leer — nichts zu exportieren.",
|
||
"auditExportNothing": "Keine Ereignisse in der aktuellen Ansicht — nichts zu exportieren.",
|
||
"auditExportSaved": "{n} Ereignisse exportiert nach {path}",
|
||
"@auditExportSaved": {"placeholders": {"n": {"type": "int"}, "path": {"type": "String"}}},
|
||
"auditDevResetAction": "Entwicklungs-Reset: Protokoll löschen … (nur local/dev)",
|
||
"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 geprüft",
|
||
"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 <capability-name> 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 <name> <flow.yaml>, 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 .chain-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"
|
||
}
|
||
}
|
||
},
|
||
"authPolicyHeader": "ZUGRIFFSSCHUTZ DES HUBS",
|
||
"authPolicyBlurb": "Wie der Hub eingehende Aufrufe prüft: aktives Prüfverfahren, Tokens und ihre Rechte (Scopes). Geheimnisse bleiben in Umgebungsvariablen — hier erscheinen nur deren Namen.",
|
||
"authPolicyValidatorStatic": "Prüfverfahren: statische Token-Liste",
|
||
"authPolicyValidatorJwt": "Prüfverfahren: JWT (RS256) über eine externe Identitätsstelle",
|
||
"authPolicyAnonymous": "Keine Tokens konfiguriert — der Hub akzeptiert anonyme Aufrufe. Für lokales Arbeiten in Ordnung; für den Produktivbetrieb Tokens in ~/.chain/config.yaml einrichten.",
|
||
"authPolicyReloadRequired": "Die Konfigurationsdatei (oder eine Umgebungsvariable) wurde seit dem Laden geändert — der Hub erzwingt noch den alten Stand. Unten „Neu laden“ wählen, damit die Änderung wirkt.",
|
||
"authPolicyNeedsAdmin": "Diese Ansicht braucht ein Token mit admin-Recht. Hinterlegen Sie es oben unter „Hub-Authentifizierung“ und laden Sie neu.",
|
||
"authPolicyHubTooOld": "Der verbundene Hub kennt diese Ansicht noch nicht — er ist älter als Studio. Aktualisieren Sie den Hub (chain update apply) und laden Sie neu.",
|
||
"authPolicyRetry": "Erneut versuchen",
|
||
"authPolicyReload": "Tokens neu laden",
|
||
"authPolicyReloadDone": "Neu geladen — {n} Token aktiv.",
|
||
"@authPolicyReloadDone": {"placeholders": {"n": {"type": "int"}}},
|
||
"authPolicyEditHint": "Bearbeitet wird die Richtlinie in ~/.chain/config.yaml (Abschnitt auth:). Nach einer Änderung oder Token-Rotation hier neu laden — der Hub übernimmt sie ohne Neustart.",
|
||
"authPolicyEnvSet": "Umgebungsvariable {env} ist gesetzt",
|
||
"@authPolicyEnvSet": {"placeholders": {"env": {"type": "String"}}},
|
||
"authPolicyEnvMissing": "Umgebungsvariable {env} FEHLT — das Token ist nicht nutzbar",
|
||
"@authPolicyEnvMissing": {"placeholders": {"env": {"type": "String"}}},
|
||
"authPolicyRateLimit": "{n}/min",
|
||
"@authPolicyRateLimit": {"placeholders": {"n": {"type": "int"}}},
|
||
"authPolicyJwtKeySource": "Schlüsselquelle",
|
||
"authPolicyJwtAudience": "Audience (aud)",
|
||
"authPolicyJwtIssuer": "Aussteller (iss)",
|
||
"authPolicyJwtScopeClaim": "Scope-Claim",
|
||
"authPolicyNotChecked": "wird nicht geprüft",
|
||
"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ählen Sie 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 <provider>/-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": "Sie sind eingerichtet.",
|
||
"welcomeChecklistAllSetBody": "Drei Stränge, an denen Sie als Nächstes ziehen können:",
|
||
"welcomeChecklistNextAuditTitle": "Audit-Log lesen",
|
||
"welcomeChecklistNextAuditBody": "Jede Installation, jeder Flow-Lauf, jede Freigabe landet im hash-verketteten Protokoll. Im Protokoll-Tab sehen Sie, was Ihr Hub gemacht hat.",
|
||
"welcomeChecklistNextAuditButton": "Protokoll öffnen",
|
||
"welcomeChecklistNextTodayTitle": "Daily-Today-Story einrichten",
|
||
"welcomeChecklistNextTodayBody": "Für Fortgeschrittene: das Skript tools/today/propose.sh regelmäßig (Cron) laufen lassen — die Editorial-Karte im Store füllt sich dann mit kuratierten Stories.",
|
||
"welcomeChecklistNextTodayButton": "Today-Doku öffnen",
|
||
"welcomeChecklistNextModuleTitle": "Eigenes Modul bauen",
|
||
"welcomeChecklistNextModuleBody": "Für Entwickler: Mit chain new module <name> entsteht ein fertiges Modul-Gerüst (Rust+WASM). Das module-sdk übernimmt die technische Anbindung; Sie schreiben nur die eigentliche Logik.",
|
||
"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. Wenn ein Flow eine menschliche Freigabe verlangt, erscheint die Anfrage automatisch hier.",
|
||
"approvalsReloadTooltip": "Aktualisieren",
|
||
"approvalsPillPending": "offen",
|
||
"approvalsPillApproved": "freigegeben",
|
||
"approvalsPillRejected": "abgelehnt",
|
||
"approvalsPillExpired": "abgelaufen",
|
||
"approvalsPayloadPreview": "ZU PRÜFENDE DATEN",
|
||
"approvalsNoPayload": "Keine Daten zum Prüfen angehängt. Der system.approval-Schritt des Flows bestimmt über sein \"show:\"-Feld, was angezeigt wird — setzen Sie es, um die Daten hinter dieser Entscheidung sichtbar zu machen.",
|
||
"approvalsNoDataConfirmTitle": "Ohne Prüfdaten freigeben?",
|
||
"approvalsNoDataConfirmBody": "Dieser Flow hat bewusst keine Prüfdaten hinterlegt (kein \"show:\" am Freigabe-Schritt). Sie können trotzdem freigeben — entscheiden dann aber, ohne die Daten hinter dieser Entscheidung gesehen zu haben.",
|
||
"approvalsNoDataConfirmAction": "Trotzdem freigeben",
|
||
"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, plural, =1{1 Fähigkeit} other{{n} Fähigkeiten}}",
|
||
"@doctorSummaryCapabilities": {
|
||
"placeholders": {
|
||
"n": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"doctorSummaryPending": "offen",
|
||
"doctorSummaryChain": "{verified} von {total} Ereignissen geprüft",
|
||
"@doctorSummaryChain": {
|
||
"placeholders": {
|
||
"verified": {
|
||
"type": "int"
|
||
},
|
||
"total": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"doctorSummaryDeclared": "deklariert",
|
||
"doctorModulesPanelSummary": "{n, plural, =1{1 Modul} other{{n} Module}} · {m, plural, =1{1 Fähigkeit} other{{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} {n, plural, =1{Ereignis} other{Ereignisse}} · Verkettung lückenlos geprüft",
|
||
"@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": "Hash-Kette geprüft",
|
||
"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…",
|
||
"doctorConnLine": "Verbindung: {endpoint} · {transport} · {auth}",
|
||
"@doctorConnLine": {
|
||
"placeholders": {
|
||
"endpoint": {"type": "String"},
|
||
"transport": {"type": "String"},
|
||
"auth": {"type": "String"}
|
||
}
|
||
},
|
||
"doctorConnTls": "TLS-verschlüsselt",
|
||
"doctorConnPlainLocal": "unverschlüsselt (bleibt auf diesem Rechner)",
|
||
"doctorConnPlainRemote": "unverschlüsselt",
|
||
"doctorConnToken": "Token gesetzt ({count} Zeichen)",
|
||
"@doctorConnToken": {
|
||
"placeholders": {
|
||
"count": {"type": "int"}
|
||
}
|
||
},
|
||
"doctorConnAnonymous": "ohne Token (anonym)",
|
||
"doctorDbVolatileWarning": "Die Audit-Datenbank liegt in einem temporären Ordner, den das Betriebssystem jederzeit aufräumen kann. Für belastbare Nachweise gehört das Datenverzeichnis des Hubs an einen dauerhaften Ort.",
|
||
"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.<server>.<tool> 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.<endpoint>.<slug> 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ählen Sie links einen aus oder klicken Sie auf Neuer Flow, um einen neuen anzulegen.",
|
||
"flowEditorListEmptyTitle": "Keine gespeicherten Flows",
|
||
"flowEditorListEmptyBody": "Klicken Sie auf 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",
|
||
"settingsCategoryAbout": "Über",
|
||
"aboutPanelTitle": "Über Ch∆In",
|
||
"aboutPanelBody": "Produkt-, Hersteller- und Lizenzangaben dieser Installation — alle Werte sind kopierbar.",
|
||
"aboutProduct": "Produkt",
|
||
"aboutStudioVersion": "Studio-Version",
|
||
"aboutHubVersion": "Hub-Version",
|
||
"aboutHubVersionUnknown": "nicht verbunden",
|
||
"aboutVendor": "Hersteller",
|
||
"aboutAuthor": "Autor",
|
||
"aboutLicense": "Lizenz",
|
||
"aboutContact": "Kontakt",
|
||
"aboutDocs": "Dokumentation",
|
||
"aboutOpenLink": "Im Browser öffnen",
|
||
"aboutCopyTooltip": "Kopieren",
|
||
"aboutCopiedToast": "In die Zwischenablage kopiert.",
|
||
"sidebarSearchLabel": "Suchen & Befehle",
|
||
"installConfirmTitle": "„{name}\" installieren?",
|
||
"@installConfirmTitle": {"placeholders": {"name": {"type": "String"}}},
|
||
"installConfirmVersion": "Version",
|
||
"installConfirmSource": "Quelle",
|
||
"installConfirmSourceBundled": "Mitgelieferter Store-Index",
|
||
"installConfirmLicense": "Lizenz",
|
||
"installConfirmStatus": "Reifegrad",
|
||
"installConfirmNeedsServices": "Benötigte Dienste",
|
||
"installConfirmNeedsCapabilities": "Benötigte Fähigkeiten",
|
||
"installConfirmTrustTitle": "Vertrauen & Sicherheit",
|
||
"installConfirmTrustBody": "Das Modul läuft in einer Sandbox: Es darf nur auf die Netzwerk-Endpunkte, Dateien und Umgebungsvariablen zugreifen, die es selbst deklariert — der Hub setzt diese Liste durch. Die vollständige Berechtigungsliste sehen Sie nach der Installation in den Modul-Details.",
|
||
"installConfirmSignatureNote": "Signaturen prüft der Hub beim Installieren, sofern die Signaturpflicht im Sicherheitsprofil aktiv ist. Einen Signaturstatus vorab zeigt der Store-Index derzeit noch nicht an (Alpha).",
|
||
"settingsSidebarPinnedTitle": "Navigation immer ausgeklappt",
|
||
"settingsSidebarPinnedBody": "Zeigt die Beschriftungen der Seitenleiste dauerhaft an, statt sie nur beim Überfahren mit der Maus einzublenden.",
|
||
"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 Fähigkeiten 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 Sie 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. Geben Sie dem Hub eine .chain-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 .chain-Bundle",
|
||
"addSourceHint": "https://git.flemming.ai/ihre-org/ihr-modul/releases/download/v0.1.0/foo-0.1.0.chain",
|
||
"addSourceHowItWorksTitle": "Wie private Module funktionieren",
|
||
"addSourceHowItWorksBody": "Ein Modul ist ein Verzeichnis mit module.yaml + WASM-Artefakt. Zum Teilen: chain pack <verzeichnis> baut ein .chain-Bundle, das Sie beliebig hosten können (eigene Forgejo / GitHub / S3). Der Hub installiert per URL und prüft die Signatur gegen seinen Trust-Store.\n\nLokal entwickeln? Nehmen Sie 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. Starten Sie die Engine, 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": "Installieren Sie die Ch∆In-Plattform oder verweisen Sie 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. Setzen Sie sie in Ihrer Shell und starten Sie den Daemon neu.",
|
||
"sysAiFixNetwork": "Der Hub erreicht den konfigurierten Endpunkt nicht. Läuft Ihr Anbieter?",
|
||
"sysAiFixHttp": "Der Anbieter hat einen Status außerhalb 2xx geliefert. Prüfen Sie Endpunkt, Modellnamen 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 Ihrem Rechner. Kein API-Schlüssel nötig.",
|
||
"providerDescOpenai": "Gehostete OpenAI-API. Erfordert einen API-Schlüssel. Daten verlassen Ihren Rechner.",
|
||
"providerDescLmstudio": "Lokaler LM-Studio-Server. Die Modelle bleiben auf Ihrem 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",
|
||
"hubAuthRejectedBanner": "{endpoint} lehnt die Anmeldung ab — Zugriffstoken prüfen",
|
||
"@hubAuthRejectedBanner": {
|
||
"placeholders": {
|
||
"endpoint": {"type": "String"}
|
||
}
|
||
},
|
||
"navFederation": "Föderation",
|
||
"federationTitle": "Föderation",
|
||
"federationReloadTooltip": "Satelliten neu laden",
|
||
"federationAddSatellite": "Satellit hinzufügen",
|
||
"federationEmptyTitle": "Keine Satelliten verbunden",
|
||
"federationEmptyHint": "Verbinden Sie einen weiteren Hub als Satellit, um Fähigkeiten dort auszuführen. Stellen Sie dazu ein Registrierungs-Token aus.",
|
||
"federationPillConnected": "verbunden",
|
||
"federationRegionNone": "keine Region",
|
||
"federationCapabilities": "{count} angebotene Fähigkeiten",
|
||
"federationAddDialogTitle": "Registrierungs-Token ausstellen",
|
||
"federationNameLabel": "Satelliten-Name",
|
||
"federationIssueButton": "Ausstellen",
|
||
"federationIssueFailed": "Token konnte nicht ausgestellt werden: {error}",
|
||
"federationEnrollmentTitle": "{name} einrichten",
|
||
"federationTokenLabel": "Einmal-Token für die Einrichtung",
|
||
"federationConfigLabel": "Satelliten-Konfiguration (in den Satelliten einfügen)",
|
||
"federationCopied": "In die Zwischenablage kopiert",
|
||
"federationEnrollmentHint": "Übergeben Sie das Token dem Satelliten-Betreiber über einen sicheren Kanal. Die mitgelieferte Zertifikatsstelle authentifiziert die erste Verbindung des Satelliten.",
|
||
"workspaceAll": "Alle Projekte",
|
||
"workspaceDefaultProject": "Allgemein",
|
||
"workspaceSwitcherTooltip": "Arbeitsbereich — filtert diese Ansicht und stempelt neue Läufe mit dem gewählten Projekt",
|
||
"workspaceProtectedHint": "Geschützt: logisch getrennt im gemeinsamen Hub — keine harte Prozessgrenze. Kritische Mandate nutzen einen abgeschotteten Bereich.",
|
||
"runsTitle": "Läufe",
|
||
"runsReloadTooltip": "Lauf-Liste neu laden",
|
||
"runsEmptyTitle": "Keine Läufe im Hintergrund",
|
||
"runsEmptyHint": "Hier erscheinen Läufe, die im Hintergrund weiterlaufen, während Sie anderes tun. Diese Funktion ist optional und standardmäßig ausgeschaltet — die Anleitung zeigt Schritt für Schritt, wie sie eingeschaltet wird.",
|
||
"runsEmptyEnabledHint": "Läufe im Hintergrund sind eingeschaltet — es wurde nur noch keiner gestartet. Starten Sie einen Flow mit der Option „im Hintergrund ausführen“, dann erscheint er hier.",
|
||
"runsEmptyGuideButton": "Anleitung öffnen",
|
||
"runsCancelButton": "Abbrechen",
|
||
"runsCancelSignalled": "Abbruch für {flow} ausgelöst.",
|
||
"@runsCancelSignalled": {"placeholders": {"flow": {"type": "String"}}},
|
||
"runsCancelTooLate": "Der Lauf war schon fertig — nichts abzubrechen.",
|
||
"runsCurrentStep": "Schritt: {step}",
|
||
"@runsCurrentStep": {"placeholders": {"step": {"type": "String"}}},
|
||
"runsPhasePending": "Wartet",
|
||
"runsPhaseRunning": "Läuft",
|
||
"runsPhaseSucceeded": "Erfolgreich",
|
||
"runsPhaseFailed": "Fehlgeschlagen",
|
||
"runsPhaseCancelled": "Abgebrochen",
|
||
"runsPhaseUnknown": "Unbekannt",
|
||
"navRuns": "Läufe",
|
||
"workspaceSealedHeader": "ABGESCHOTTETE BEREICHE",
|
||
"workspaceSealedRunning": "läuft",
|
||
"workspaceSealedStopped": "gestoppt",
|
||
"workspaceSealedRunningHint": "Der abgeschottete Bereich läuft als eigener Hub-Prozess. Auswählen wechselt hinein.",
|
||
"workspaceSealedStoppedHint": "Der abgeschottete Bereich ist gerade nicht gestartet. Auswählen startet ihn und wechselt hinein.",
|
||
"workspaceSealedStarting": "Starte abgeschotteten Bereich „{name}“…",
|
||
"@workspaceSealedStarting": {"placeholders": {"name": {"type": "String"}}},
|
||
"workspaceSealedStarted": "Abgeschotteter Bereich „{name}“ gestartet.",
|
||
"@workspaceSealedStarted": {"placeholders": {"name": {"type": "String"}}},
|
||
"workspaceSealedSwitchFailed": "Wechsel in den abgeschotteten Bereich fehlgeschlagen: {error}",
|
||
"@workspaceSealedSwitchFailed": {"placeholders": {"error": {"type": "String"}}},
|
||
"sealedIdentityBar": "Abgeschotteter Bereich — isolierter Hub, eigene Daten und Audit-Kette",
|
||
"sealedLeave": "Verlassen",
|
||
"setupStepOf": "Schritt {n} von {total}",
|
||
"@setupStepOf": {"placeholders": {"n": {"type": "int"}, "total": {"type": "int"}}},
|
||
"setupStep1Title": "Worum geht es?",
|
||
"setupStep2Title": "Was möchten Sie zuerst tun?",
|
||
"setupStep3Title": "Wo läuft es?",
|
||
"setupReviewTitle": "Das wird Ch∆In einrichten",
|
||
"setupChooseFreeText": "Oder beschreiben Sie einfach, was Sie vorhaben",
|
||
"setupScenTryingOut": "Erst mal ausprobieren",
|
||
"setupScenTryingOutSub": "Ein unkomplizierter Arbeitsplatz auf diesem Rechner — ohne Signaturpflicht, ohne Schreibschutz für das Prüfprotokoll. Später jederzeit hochstufbar: die Einrichtung erneut ausführen und ein reguliertes Profil wählen.",
|
||
"setupScenTeamHub": "Ein Team-Server",
|
||
"setupScenTeamHubSub": "Ein abgesicherter Hub für mehrere Personen — signierte Module, Ressourcen-Grenzen.",
|
||
"setupScenRegulated": "Regulierter Produktivbetrieb",
|
||
"setupScenRegulatedSub": "Signierte Module, ein lückenloses, manipulationssicheres Prüfprotokoll und eine menschliche Freigabe vor jedem KI-Schritt.",
|
||
"setupScenBuildModules": "Module entwickeln",
|
||
"setupScenBuildModulesSub": "Eine Entwickler-Einrichtung zum Schreiben und Testen eigener Module.",
|
||
"setupIntentHello": "Das Hallo-Beispiel ausführen",
|
||
"setupIntentHelloSub": "Einfach einen Flow einmal von Anfang bis Ende sehen.",
|
||
"setupIntentExtract": "Text aus Dokumenten extrahieren",
|
||
"setupIntentExtractSub": "Reinen Text aus PDF- und DOCX-Dateien holen.",
|
||
"setupIntentExtractSummarize": "Extrahieren und zusammenfassen",
|
||
"setupIntentExtractSummarizeSub": "Text extrahieren und anschließend zusammenfassen.",
|
||
"setupIntentClassify": "Eingehende Dokumente einsortieren",
|
||
"setupIntentClassifySub": "Text extrahieren und mit einem KI-Schritt klassifizieren.",
|
||
"setupIntentBuildModule": "Ein eigenes Modul bauen",
|
||
"setupIntentBuildModuleSub": "Mit einem Modul-Gerüst starten.",
|
||
"setupTargetLaptop": "Dieser Rechner",
|
||
"setupTargetLaptopSub": "Läuft lokal auf dem Gerät, an dem Sie gerade sitzen.",
|
||
"setupTargetHomeServer": "Ein eigener Server",
|
||
"setupTargetHomeServerSub": "Ein Server im eigenen Haus — startet beim Hochfahren, läuft im Hintergrund.",
|
||
"setupTargetAirgapped": "Ein vollständig lokaler Server (ohne Internet)",
|
||
"setupTargetAirgappedSub": "Ein isolierter Server ohne Internet — die strengste, privateste Betriebsart.",
|
||
"setupTargetContainer": "Ein Container",
|
||
"setupTargetContainerSub": "Docker oder Podman, mit fertigem Compose-Schnipsel.",
|
||
"setupApprovalPlain": "Vor jedem KI-Schritt einen Menschen um Freigabe bitten",
|
||
"setupDataLocalPlain": "Daten dürfen das Haus nie verlassen (vollständig lokal)",
|
||
"setupPlanIntroDev": "Ch∆In richtet einen unkomplizierten Arbeitsplatz ein.",
|
||
"setupPlanIntroEnterprise": "Ch∆In richtet einen abgesicherten Betrieb für ein Team ein.",
|
||
"setupPlanIntroAirgapped": "Ch∆In richtet einen vollständig lokalen, regulierten Betrieb ein.",
|
||
"setupPlanSignatures": "Es werden nur signierte Module zugelassen.",
|
||
"setupPlanWorm": "Das Prüfprotokoll wird zusätzlich manipulationssicher (WORM) gesichert.",
|
||
"setupPlanApproval": "Vor jedem KI-Schritt fragt das System einen Menschen um Freigabe.",
|
||
"setupPlanModules": "Diese Module werden vorbereitet: {modules}.",
|
||
"@setupPlanModules": {"placeholders": {"modules": {"type": "String"}}},
|
||
"setupPlanFlow": "Ein Beispiel-Flow „{flow}“ wird angelegt.",
|
||
"@setupPlanFlow": {"placeholders": {"flow": {"type": "String"}}},
|
||
"setupPlanFileChanged": "Geändert wird nur eine Datei: {path}.",
|
||
"@setupPlanFileChanged": {"placeholders": {"path": {"type": "String"}}},
|
||
"setupPlanOverwriteWarn": "Eine vorhandene Konfiguration wird überschrieben.",
|
||
"setupApplied": "Fertig — Ch∆In ist eingerichtet.",
|
||
"setupNextTitle": "Nächste Schritte",
|
||
"setupNextHubStart": "Hub starten",
|
||
"setupHubRunning": "Der Hub läuft.",
|
||
"setupStartHubFirst": "Starten Sie zuerst den Hub — dann lassen sich die Module hier installieren.",
|
||
"setupActionInstall": "{module} installieren",
|
||
"@setupActionInstall": {"placeholders": {"module": {"type": "String"}}},
|
||
"setupActionInstalled": "{module} ist installiert.",
|
||
"@setupActionInstalled": {"placeholders": {"module": {"type": "String"}}},
|
||
"setupActionOpenFlow": "Beispiel-Flow „{flow}“ öffnen",
|
||
"@setupActionOpenFlow": {"placeholders": {"flow": {"type": "String"}}},
|
||
"setupModulesOfflineHint": "Die Module kommen ohne Internet als Offline-Paket auf den Server — die Anleitung dazu steht in der Dokumentation unter „Betrieb ohne Internet“.",
|
||
"setupModulesSignedHint": "Die Module kommen aus einer eigenen, signierten Quelle — nicht aus dem öffentlichen Store.",
|
||
"setupSigPublicStoreNotice": "Diese Einrichtung lässt nur signierte Module zu. Der öffentliche Store liefert zurzeit unsignierte Pakete — die vorbereiteten Module kommen daher aus einer eigenen, signierten Quelle.",
|
||
"setupAllowUnsigned": "Installation aus dem öffentlichen Store erlauben",
|
||
"setupAllowUnsignedSub": "Lockert die Signaturpflicht bewusst. Gut zum Ausprobieren — für den regulierten Betrieb später wieder aktivieren.",
|
||
"setupStartCta": "Einrichtung starten",
|
||
"setupGateIntro": "Bevor es losgeht: drei Fragen, dann richtet Ch∆In diesen Rechner passend ein. Nichts wird ohne Ihre Bestätigung geändert.",
|
||
"setupGateSkip": "Später einrichten",
|
||
"settingsRunSetup": "Einrichtung erneut ausführen…",
|
||
"settingsRunSetupHint": "Öffnet den Einrichtungs-Assistenten (drei Fragen, Vorschau, Übernehmen). Die bestehende Konfiguration wird erst nach Ihrer Bestätigung ersetzt.",
|
||
"setupPlanRunbookLocal": "Eingerichtet wird dieser Rechner; der Hub läuft lokal und wird bei Bedarf gestartet.",
|
||
"setupPlanRunbookService": "Eingerichtet wird dieser Rechner: Der Hub startet künftig automatisch beim Hochfahren (Hintergrund-Dienst). Für einen anderen Server führen Sie die Einrichtung dort aus.",
|
||
"setupPlanRunbookAirgap": "Vorgesehen für einen isolierten Server ohne Internet — Module und Updates kommen als Offline-Paket.",
|
||
"setupPlanRunbookContainer": "Vorgesehen für den Betrieb im Container — ein fertiges Compose-Beispiel wird mitgeliefert.",
|
||
"setupPlanAuditChain": "Jeder Schritt landet in einem lückenlosen, hash-verketteten Prüfprotokoll — Manipulation wird erkennbar.",
|
||
"setupPlanDocs": "Eine passende Leseliste ({n} Kapitel) wird mit dem Einrichtungs-Protokoll unter ~/.chain/ gespeichert.",
|
||
"@setupPlanDocs": {"placeholders": {"n": {"type": "int"}}},
|
||
"setupTrustedPublishersHint": "Wichtig: Hinterlegen Sie beim Hinzufügen der Quelle den Schlüssel des Herausgebers („Signatur-Schlüssel anheften“) — sonst akzeptiert der Hub jede formal gültige Signatur, egal von wem.",
|
||
"setupAddSignedSource": "Signierte Quelle hinzufügen…",
|
||
"setupApplyNotes": "Hinweise aus der Einrichtung",
|
||
"setupFreeTextHint": "z. B.: Eingehende Anträge vorprüfen und unvollständige markieren",
|
||
"setupFreeTextSuggest": "Vorschlagen lassen",
|
||
"setupFreeTextPrivacyLocal": "Ihre Beschreibung wird direkt auf diesem Rechner verarbeitet — durch das lokale KI-Modell {model}. Nichts verlässt das Gerät.",
|
||
"@setupFreeTextPrivacyLocal": {"placeholders": {"model": {"type": "String"}}},
|
||
"setupFreeTextPrivacyRemote": "Ihre Beschreibung wird an die eingerichtete System-KI gesendet: {model} ({provider}).",
|
||
"@setupFreeTextPrivacyRemote": {"placeholders": {"model": {"type": "String"}, "provider": {"type": "String"}}},
|
||
"setupFreeTextUnavailable": "Für den Freitext-Weg braucht Ch∆In eine eingerichtete System-KI (Einstellungen → System-KI). Die Auswahl oben funktioniert immer — ganz ohne KI.",
|
||
"setupExecHint": "Für Vorschau und Einrichtung führt Studio das Programm „chain“ aus: {path}",
|
||
"@setupExecHint": {"placeholders": {"path": {"type": "String"}}},
|
||
"setupExecHintTcc": "Das Programm liegt unter {path} — macOS fragt dafür eventuell einmalig nach Zugriff auf diesen Ordner (z. B. „Dokumente“). Das ist zu erwarten und in Ordnung.",
|
||
"@setupExecHintTcc": {"placeholders": {"path": {"type": "String"}}},
|
||
"setupNoBinaryStepHint": "Das Programm „chain“ wurde auf diesem Rechner nicht gefunden — die Vorschau im nächsten Schritt wird fehlschlagen. Unter „Diagnose“ können Sie es auswählen oder Ch∆In installieren.",
|
||
"setupNoBinary": "Das Programm „chain“ wurde auf diesem Rechner nicht gefunden.",
|
||
"setupNoBinaryHint": "Ohne das Programm kann der Assistent die Einrichtung nicht anwenden. Wählen Sie es unter „Diagnose“ aus oder installieren Sie Ch∆In neu.",
|
||
"setupCliTooOld": "Das installierte „chain“-Programm ist älter als Studio und kennt diesen Assistenten noch nicht.",
|
||
"setupCliTooOldHint": "Gefunden wurde: {path}. Bitte Ch∆In aktualisieren (Seite „Diagnose“ → Update, oder im Terminal: chain update apply) und den Assistenten danach erneut öffnen.",
|
||
"@setupCliTooOldHint": {"placeholders": {"path": {"type": "String"}}},
|
||
"setupPreviewFailed": "Die Plan-Vorschau konnte nicht erstellt werden — das Programm „chain“ meldet einen Fehler.",
|
||
"setupApplyFailed": "Die Einrichtung konnte nicht angewendet werden — das Programm „chain“ meldet einen Fehler.",
|
||
"setupCliUsedBinary": "Ausgeführt wurde: {path}",
|
||
"@setupCliUsedBinary": {"placeholders": {"path": {"type": "String"}}},
|
||
"setupFreeTextParseError": "Die System-KI hat keinen verwertbaren Vorschlag geliefert. Wählen Sie oben aus dem Menü — oder versuchen Sie es noch einmal.",
|
||
"setupReflectionTitle": "So verstehe ich Ihre Aufgabe",
|
||
"setupReflectionScenario": "Worum es geht: {label}",
|
||
"@setupReflectionScenario": {"placeholders": {"label": {"type": "String"}}},
|
||
"setupReflectionIntent": "Erste Aufgabe: {label}",
|
||
"@setupReflectionIntent": {"placeholders": {"label": {"type": "String"}}},
|
||
"setupReflectionTarget": "Umgebung: {label}",
|
||
"@setupReflectionTarget": {"placeholders": {"label": {"type": "String"}}},
|
||
"setupReflectionApproval": "Vor jedem KI-Schritt wird ein Mensch um Freigabe gebeten.",
|
||
"setupReflectionDataLocal": "Daten bleiben vollständig im Haus.",
|
||
"setupReflectionEditHint": "Es wird nichts ohne Ihre Bestätigung geändert. Passen Sie die Punkte an oder gehen Sie direkt zur Vorschau.",
|
||
"setupReflectionAdjust": "Anpassen",
|
||
"setupReflectionToPreview": "Zur Vorschau",
|
||
"setupProfileDev": "unkomplizierter Arbeitsplatz",
|
||
"setupProfileEnterprise": "abgesicherter Team-Betrieb",
|
||
"setupProfileAirgapped": "vollständig lokaler, regulierter Betrieb",
|
||
"welcomeChecklistSetupDone": "Die Grundeinrichtung ({profile}) hat der Einrichtungs-Assistent bereits erledigt — hier sehen Sie, was auf dem Hub schon passiert ist.",
|
||
"@welcomeChecklistSetupDone": {"placeholders": {"profile": {"type": "String"}}}
|
||
}
|