A Welcome 'Setup assistant' button opens a wizard that collects scenario / intent / target (+ approval & data-local toggles), then calls `chain init --answers` to preview the assembled plan and `--apply --force` to write the config — reusing the Rust deterministic engine, no logic duplicated. New SystemActions.chainInit; copyable errors via showFaiProcessError; EN+DE l10n. analyze clean; smoke test + existing welcome/sidebar tests pass. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
1651 lines
65 KiB
Text
1651 lines
65 KiB
Text
{
|
||
"@@locale": "de",
|
||
"guidedSetupTitle": "Setup-Assistent",
|
||
"guidedSetupIntro": "Beantworte drei Fragen — Ch∆In stellt passende Konfiguration, Modul-Set und Start-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 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.<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 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",
|
||
"storesManagerPinnedKeyLabel": "Angepinnter Public-Key — PEM (optional)",
|
||
"storesManagerPinnedKeyHint": "Signierte Module dieses Stores werden gegen diesen Key geprüft statt gegen den eingebauten Vendor-Key. Füge einen PEM-Public-Key ein.",
|
||
"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 <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 .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 `<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": "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 <name>` 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": "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 — setze es, um die Daten hinter dieser Entscheidung sichtbar zu machen.",
|
||
"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.<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ä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 <verzeichnis>` 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."
|
||
}
|