fix(l10n): no literal backticks in UI text, two stray informal imperatives
Some checks are pending
Security / Security check (push) Waiting to run

Text widgets render markdown backticks verbatim (usertest: reads
as typos / raw dev output) — stripped across both catalogs; code
terms stay inline in plain type. 'Zeig dem Hub' / 'Nimm das CLI'
now use the formal address; the guard test learns both stems.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-18 00:25:31 +02:00
parent eab58c0b68
commit 6bbe670074
6 changed files with 156 additions and 156 deletions

View file

@ -54,13 +54,13 @@
"errApprovalRejected": "Freigabe vom Reviewer abgelehnt.", "errApprovalRejected": "Freigabe vom Reviewer abgelehnt.",
"errApprovalRejectedHint": "Der Reviewer hat den Step abgelehnt. Begründung steht im Audit-Log.", "errApprovalRejectedHint": "Der Reviewer hat den Step abgelehnt. Begründung steht im Audit-Log.",
"errApprovalTimedOut": "Freigabe-Timeout abgelaufen.", "errApprovalTimedOut": "Freigabe-Timeout abgelaufen.",
"errApprovalTimedOutHint": "Es wurde nicht rechtzeitig entschieden. Entweder `timeout_seconds` am Freigabe-Step erhöhen oder den Reviewer informieren.", "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.", "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.", "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.", "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.", "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.", "errMissingValue": "Pflichtwert fehlt.",
"errMissingValueHint": "Der Step erwartet eine Eingabe, die nicht verdrahtet ist — entweder zur Laufzeit liefern oder den vorgelagerten `$ref` korrigieren.", "errMissingValueHint": "Der Step erwartet eine Eingabe, die nicht verdrahtet ist — entweder zur Laufzeit liefern oder den vorgelagerten $ref korrigieren.",
"errMcpUnreachable": "MCP-Endpunkt nicht erreichbar.", "errMcpUnreachable": "MCP-Endpunkt nicht erreichbar.",
"errMcpUnreachableHint": "Der MCP-Server hat nicht geantwortet. Endpunkt in Einstellungen → Integrationen prüfen und sicherstellen, dass er läuft.", "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.", "errCapabilityNotInstalled": "Benötigte Capability nicht installiert.",
@ -216,7 +216,7 @@
"n8nAddTooltip": "n8n-Endpunkt hinzufügen", "n8nAddTooltip": "n8n-Endpunkt hinzufügen",
"n8nRemoveTooltip": "Endpunkt entfernen", "n8nRemoveTooltip": "Endpunkt entfernen",
"addMcpTitle": "MCP-Server hinzufügen", "addMcpTitle": "MCP-Server hinzufügen",
"addMcpIntro": "Tools, die der Server via `tools/list` anbietet, erscheinen im Store als `mcp.<name>.<tool>`-Fähigkeiten.", "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", "addMcpSuggestionsLabel": "Vorschläge — zum Vorausfüllen klicken",
"addMcpNameLabel": "Name (keine Punkte)", "addMcpNameLabel": "Name (keine Punkte)",
"addMcpNameHint": "filesystem", "addMcpNameHint": "filesystem",
@ -227,7 +227,7 @@
"addMcpNotesLabel": "Notizen (optional)", "addMcpNotesLabel": "Notizen (optional)",
"addMcpAddButton": "Hinzufügen + Discovery", "addMcpAddButton": "Hinzufügen + Discovery",
"addN8nTitle": "n8n-Endpunkt hinzufügen", "addN8nTitle": "n8n-Endpunkt hinzufügen",
"addN8nIntro": "Aktive Workflows erscheinen im Store als `n8n.<name>.<workflow_slug>`-Fähigkeiten.", "addN8nIntro": "Aktive Workflows erscheinen im Store als n8n.<name>.<workflow_slug>-Fähigkeiten.",
"addN8nNameLabel": "Name (keine Punkte)", "addN8nNameLabel": "Name (keine Punkte)",
"addN8nNameHint": "ops", "addN8nNameHint": "ops",
"addN8nBaseUrlLabel": "Basis-URL (ohne /api/v1)", "addN8nBaseUrlLabel": "Basis-URL (ohne /api/v1)",
@ -668,7 +668,7 @@
"auditClearLogButton": "Log löschen", "auditClearLogButton": "Log löschen",
"modulesTitle": "Module", "modulesTitle": "Module",
"modulesNoneTitle": "Noch keine Module", "modulesNoneTitle": "Noch keine Module",
"modulesNoneHint": "`chain install <capability-name>` ausführen oder ~/.chain/modules/ prüfen.", "modulesNoneHint": "chain install <capability-name> ausführen oder ~/.chain/modules/ prüfen.",
"modulesReloadTooltip": "Aktualisieren", "modulesReloadTooltip": "Aktualisieren",
"modulesRecentActivity": "LETZTE AKTIVITÄT", "modulesRecentActivity": "LETZTE AKTIVITÄT",
"modulesRecentActivityHint": "letzte {n} install/uninstall-Ereignisse aus dem Audit-Log", "modulesRecentActivityHint": "letzte {n} install/uninstall-Ereignisse aus dem Audit-Log",
@ -683,7 +683,7 @@
"modulesActivityUninstalled": "deinstalliert", "modulesActivityUninstalled": "deinstalliert",
"modulesCapabilitiesLabel": "Fähigkeiten", "modulesCapabilitiesLabel": "Fähigkeiten",
"modulesUninstallTitle": "Modul deinstallieren?", "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": "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": { "@modulesUninstallBody": {
"placeholders": { "placeholders": {
"name": { "name": {
@ -728,7 +728,7 @@
"flowsTitle": "Flows", "flowsTitle": "Flows",
"flowsReloadTooltip": "Aktualisieren", "flowsReloadTooltip": "Aktualisieren",
"flowsNoneTitle": "Keine gespeicherten Flows", "flowsNoneTitle": "Keine gespeicherten Flows",
"flowsNoneHint": "Flow speichern mit `chain admin flows save <name> <flow.yaml>`, dann taucht er hier auf.", "flowsNoneHint": "Flow speichern mit chain admin flows save <name> <flow.yaml>, dann taucht er hier auf.",
"flowsRunDialogTitle": "{name} ausführen", "flowsRunDialogTitle": "{name} ausführen",
"@flowsRunDialogTitle": { "@flowsRunDialogTitle": {
"placeholders": { "placeholders": {
@ -896,7 +896,7 @@
}, },
"storeAdvisoryVersionTooltip": "Föderierter Upstream-Dienst — Version ist Richtwert; der Upstream kann ohne Versionsanhebung Kompatibilität brechen.", "storeAdvisoryVersionTooltip": "Föderierter Upstream-Dienst — Version ist Richtwert; der Upstream kann ohne Versionsanhebung Kompatibilität brechen.",
"uninstallVersionPickerTitle": "Version zum Entfernen wählen", "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": "Mehrere Versionen von {module} sind parallel installiert. Wählen Sie genau die Version aus, die entfernt werden soll — die anderen bleiben bestehen.",
"@uninstallVersionPickerBody": { "@uninstallVersionPickerBody": {
"placeholders": { "placeholders": {
"module": { "module": {
@ -906,7 +906,7 @@
}, },
"uninstallVersionPickerContinue": "Weiter", "uninstallVersionPickerContinue": "Weiter",
"defaultScopeHeader": "STANDARD-SCOPE", "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.", "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", "defaultScopeAddLabel": "Publisher-Segment hinzufügen",
"defaultScopeAddHint": "z.B. acme.team", "defaultScopeAddHint": "z.B. acme.team",
"defaultScopeAddButton": "Hinzufügen", "defaultScopeAddButton": "Hinzufügen",
@ -934,7 +934,7 @@
"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.", "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", "welcomeChecklistNextTodayButton": "Today-Doku öffnen",
"welcomeChecklistNextModuleTitle": "Eigenes Modul bauen", "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.", "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", "welcomeChecklistNextModuleButton": "Doku lesen",
"auditGroupToday": "HEUTE", "auditGroupToday": "HEUTE",
"auditGroupYesterday": "GESTERN", "auditGroupYesterday": "GESTERN",
@ -1033,15 +1033,15 @@
"errNotFoundHint": "Das Angefragte ist nicht hier — entweder entfernt oder nie existiert.", "errNotFoundHint": "Das Angefragte ist nicht hier — entweder entfernt oder nie existiert.",
"errAlreadyExists": "Existiert bereits.", "errAlreadyExists": "Existiert bereits.",
"errPermissionDenied": "Berechtigung verweigert.", "errPermissionDenied": "Berechtigung verweigert.",
"errPermissionDeniedHint": "Die Operator-Policy des Hubs blockiert diese Aktion. `~/.chain/config.yaml` prüfen.", "errPermissionDeniedHint": "Die Operator-Policy des Hubs blockiert diese Aktion. ~/.chain/config.yaml prüfen.",
"errFailedPrecondition": "Setup-Problem hat das blockiert.", "errFailedPrecondition": "Setup-Problem hat das blockiert.",
"errFailedPreconditionHint": "Der Hub konnte nicht weiter, weil etwas Vorausgesetztes fehlt. Details unten erklären was.", "errFailedPreconditionHint": "Der Hub konnte nicht weiter, weil etwas Vorausgesetztes fehlt. Details unten erklären was.",
"errInternal": "Unerwarteter interner Fehler.", "errInternal": "Unerwarteter interner Fehler.",
"errInternalHint": "Hub-Logs unter `~/.chain/logs/` prüfen. Wenn das öfter passiert, bitte melden.", "errInternalHint": "Hub-Logs unter ~/.chain/logs/ prüfen. Wenn das öfter passiert, bitte melden.",
"errUnavailable": "Hub nicht erreichbar.", "errUnavailable": "Hub nicht erreichbar.",
"errUnavailableHint": "Sicherstellen, dass `chain serve` (oder `chain daemon start`) läuft und der Daemon-Endpunkt zu Studios Einstellungen passt.", "errUnavailableHint": "Sicherstellen, dass chain serve (oder chain daemon start) läuft und der Daemon-Endpunkt zu Studios Einstellungen passt.",
"errUnauthenticated": "Authentifizierung erforderlich.", "errUnauthenticated": "Authentifizierung erforderlich.",
"errUnauthenticatedHint": "`CHAIN_REGISTRY_TOKEN` setzen oder in den Einstellungen anmelden, dann erneut versuchen.", "errUnauthenticatedHint": "CHAIN_REGISTRY_TOKEN setzen oder in den Einstellungen anmelden, dann erneut versuchen.",
"errCopyDetail": "Detail kopieren", "errCopyDetail": "Detail kopieren",
"errDetailCopied": "Detail in die Zwischenablage kopiert.", "errDetailCopied": "Detail in die Zwischenablage kopiert.",
"flowsOutputUnknown": "Unbekannter Output-Payload-Typ.", "flowsOutputUnknown": "Unbekannter Output-Payload-Typ.",
@ -1264,7 +1264,7 @@
"doctorStatusUnknown": "Daemon-Status: …", "doctorStatusUnknown": "Daemon-Status: …",
"doctorPillRunning": "läuft", "doctorPillRunning": "läuft",
"doctorPillStopped": "gestoppt", "doctorPillStopped": "gestoppt",
"doctorDaemonControlHint": "Studio ruft das Platform-Binary auf — entspricht `chain daemon …`, sodass CLI und UI im Gleichschritt bleiben.", "doctorDaemonControlHint": "Studio ruft das Platform-Binary auf — entspricht chain daemon …, sodass CLI und UI im Gleichschritt bleiben.",
"doctorDaemonControlWorking": "Wird ausgeführt…", "doctorDaemonControlWorking": "Wird ausgeführt…",
"doctorPathLog": "Log", "doctorPathLog": "Log",
"doctorPathConfig": "Konfig", "doctorPathConfig": "Konfig",
@ -1272,7 +1272,7 @@
"doctorPathModules": "Module-Verzeichnis", "doctorPathModules": "Module-Verzeichnis",
"doctorPathFlows": "Flow-Verzeichnis", "doctorPathFlows": "Flow-Verzeichnis",
"doctorPathPid": "PID-Datei", "doctorPathPid": "PID-Datei",
"doctorPathsEmpty": "Daemon hat keine Datei-Pfade gemeldet. Hub aktualisieren via `chain daemon restart`.", "doctorPathsEmpty": "Daemon hat keine Datei-Pfade gemeldet. Hub aktualisieren via chain daemon restart.",
"doctorOpenError": "Konnte nicht öffnen: {detail}", "doctorOpenError": "Konnte nicht öffnen: {detail}",
"@doctorOpenError": { "@doctorOpenError": {
"placeholders": { "placeholders": {
@ -1289,7 +1289,7 @@
} }
} }
}, },
"doctorUpdateBody": "Kanal {channel} bietet jetzt {version}. Per Button anwenden — Studio ruft `chain update apply --channel {channel}` auf.", "doctorUpdateBody": "Kanal {channel} bietet jetzt {version}. Per Button anwenden — Studio ruft chain update apply --channel {channel} auf.",
"@doctorUpdateBody": { "@doctorUpdateBody": {
"placeholders": { "placeholders": {
"channel": { "channel": {
@ -1323,13 +1323,13 @@
"doctorApplying": "Wird angewendet…", "doctorApplying": "Wird angewendet…",
"doctorApplyDone": "Update angewendet. Studio neu starten, um die neue Daemon-Version zu sehen.", "doctorApplyDone": "Update angewendet. Studio neu starten, um die neue Daemon-Version zu sehen.",
"mcpHeader": "MCP-CLIENTS", "mcpHeader": "MCP-CLIENTS",
"mcpHint": "Externe MCP-Server bringen ihre Tools als `mcp.<server>.<tool>` Fähigkeiten ein. Einmal konfigurieren, im Store sichtbar.", "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.", "mcpEmpty": "Keine MCP-Server konfiguriert. + klicken zum Hinzufügen.",
"n8nHeader": "N8N-ENDPUNKTE", "n8nHeader": "N8N-ENDPUNKTE",
"n8nHint": "Aktive n8n-Workflows erscheinen als `n8n.<endpoint>.<slug>` Fähigkeiten. Einmal konfigurieren, im Store sichtbar.", "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.", "n8nEmpty": "Keine n8n-Endpunkte konfiguriert. + klicken zum Hinzufügen.",
"hubUnreachable": "Hub nicht erreichbar", "hubUnreachable": "Hub nicht erreichbar",
"hubUnreachableHint": "Hub starten mit `chain serve`.", "hubUnreachableHint": "Hub starten mit chain serve.",
"languageEnglish": "English", "languageEnglish": "English",
"languageGerman": "Deutsch", "languageGerman": "Deutsch",
"searchHint": "Springe überall hin — Module, Store, Flows, Seiten…", "searchHint": "Springe überall hin — Module, Store, Flows, Seiten…",
@ -1384,7 +1384,7 @@
"systemAiEndpointLabel": "Endpunkt-URL (bis /v1)", "systemAiEndpointLabel": "Endpunkt-URL (bis /v1)",
"systemAiApiKeyRequired": "API-Key-Umgebungsvariable (erforderlich)", "systemAiApiKeyRequired": "API-Key-Umgebungsvariable (erforderlich)",
"systemAiApiKeyOptional": "API-Key-Umgebungsvariable (optional)", "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": "Studio liest oder speichert den Key-Wert nie — nur den Namen der Umgebungsvariable. Der Hub liest ${name} zur Anfragezeit.",
"@systemAiApiKeyDisclaimer": { "@systemAiApiKeyDisclaimer": {
"placeholders": { "placeholders": {
"name": { "name": {
@ -1623,7 +1623,7 @@
} }
}, },
"addSourceTitle": "Modul-Quelle hinzufügen", "addSourceTitle": "Modul-Quelle hinzufügen",
"addSourceIntro": "`{capability}` ist nicht im öffentlichen Store. Zeig dem Hub eine `.chain`-Bundle-URL oder einen lokalen Bundle-Pfad — der Hub lädt es herunter, prüft (sha256 + Signatur) und installiert.", "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": { "@addSourceIntro": {
"placeholders": { "placeholders": {
"capability": {"type": "String"} "capability": {"type": "String"}
@ -1632,7 +1632,7 @@
"addSourceField": "URL oder Pfad zum .chain-Bundle", "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", "addSourceHint": "https://git.flemming.ai/ihre-org/ihr-modul/releases/download/v0.1.0/foo-0.1.0.chain",
"addSourceHowItWorksTitle": "Wie private Module funktionieren", "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? Nimm das CLI — Studio installiert (noch) nicht aus einem unverpackten Verzeichnis:", "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", "addSourceCliExample": "chain install --link /pfad/zum/modul",
"addSourceInstallButton": "Installieren", "addSourceInstallButton": "Installieren",
"addSourceCancel": "Abbrechen", "addSourceCancel": "Abbrechen",
@ -1660,12 +1660,12 @@
"detail": {"type": "String"} "detail": {"type": "String"}
} }
}, },
"chainBinaryNotFound": "Das Programm `chain` wurde auf diesem Rechner nicht gefunden.", "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.", "chainBinaryNotFoundHint": "Installieren Sie die Ch∆In-Plattform oder verweisen Sie Studio auf eine vorhandene chain-Datei.",
"chainBinaryLocateButton": "`chain`-Programm suchen …", "chainBinaryLocateButton": "chain-Programm suchen …",
"chainBinaryInstallDocsButton": "Installationsanleitung öffnen", "chainBinaryInstallDocsButton": "Installationsanleitung öffnen",
"chainBinaryPickerTitle": "`chain`-Programm auswählen", "chainBinaryPickerTitle": "chain-Programm auswählen",
"chainBinarySetOk": "Verwende `chain` unter {path}", "chainBinarySetOk": "Verwende chain unter {path}",
"@chainBinarySetOk": { "@chainBinarySetOk": {
"placeholders": { "placeholders": {
"path": {"type": "String"} "path": {"type": "String"}
@ -1695,7 +1695,7 @@
"detail": {"type": "String"} "detail": {"type": "String"}
} }
}, },
"providerDescOllama": "Lokales `ollama serve`. Die Modelle bleiben auf Ihrem Rechner. Kein API-Schlüssel nötig.", "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.", "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.", "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.", "providerDescVllm": "Selbst gehostetes vLLM oder ein anderer OpenAI-kompatibler Server. Endpunkt erforderlich.",

View file

@ -62,13 +62,13 @@
"errApprovalRejected": "Approval rejected by reviewer.", "errApprovalRejected": "Approval rejected by reviewer.",
"errApprovalRejectedHint": "The reviewer marked this step as rejected. Check the audit log for the reviewer's reason.", "errApprovalRejectedHint": "The reviewer marked this step as rejected. Check the audit log for the reviewer's reason.",
"errApprovalTimedOut": "Approval timed out.", "errApprovalTimedOut": "Approval timed out.",
"errApprovalTimedOutHint": "No reviewer decided within the configured time. Raise `timeout_seconds` on the approval step or alert the reviewer.", "errApprovalTimedOutHint": "No reviewer decided within the configured time. Raise timeout_seconds on the approval step or alert the reviewer.",
"errOutputTooLarge": "Step output exceeded the size limit.", "errOutputTooLarge": "Step output exceeded the size limit.",
"errOutputTooLargeHint": "Either trim the output (truncate text, downsample bytes) or raise `max_output_size_mb` in the operator config.", "errOutputTooLargeHint": "Either trim the output (truncate text, downsample bytes) or raise max_output_size_mb in the operator config.",
"errServiceUnavailableForStep": "Host service not configured.", "errServiceUnavailableForStep": "Host service not configured.",
"errServiceUnavailableForStepHint": "The module requires a service (e.g. ollama, playwright) the operator hasn't declared. Add it under `services:` in ~/.chain/config.yaml.", "errServiceUnavailableForStepHint": "The module requires a service (e.g. ollama, playwright) the operator hasn't declared. Add it under services: in ~/.chain/config.yaml.",
"errMissingValue": "Required value is missing.", "errMissingValue": "Required value is missing.",
"errMissingValueHint": "The step expected an input that wasn't wired up — either supply it at run time or fix the upstream `$ref`.", "errMissingValueHint": "The step expected an input that wasn't wired up — either supply it at run time or fix the upstream $ref.",
"errMcpUnreachable": "MCP endpoint unreachable.", "errMcpUnreachable": "MCP endpoint unreachable.",
"errMcpUnreachableHint": "The MCP server didn't respond. Check the endpoint in Settings → Integrations and confirm it's running.", "errMcpUnreachableHint": "The MCP server didn't respond. Check the endpoint in Settings → Integrations and confirm it's running.",
"errCapabilityNotInstalled": "Required capability is not installed.", "errCapabilityNotInstalled": "Required capability is not installed.",
@ -224,7 +224,7 @@
"n8nAddTooltip": "Add n8n endpoint", "n8nAddTooltip": "Add n8n endpoint",
"n8nRemoveTooltip": "Remove endpoint", "n8nRemoveTooltip": "Remove endpoint",
"addMcpTitle": "Add MCP server", "addMcpTitle": "Add MCP server",
"addMcpIntro": "Tools the server advertises via `tools/list` appear in the Store as `mcp.<name>.<tool>` capabilities.", "addMcpIntro": "Tools the server advertises via tools/list appear in the Store as mcp.<name>.<tool> capabilities.",
"addMcpSuggestionsLabel": "Suggested servers — click to pre-fill", "addMcpSuggestionsLabel": "Suggested servers — click to pre-fill",
"addMcpNameLabel": "Name (no dots)", "addMcpNameLabel": "Name (no dots)",
"addMcpNameHint": "filesystem", "addMcpNameHint": "filesystem",
@ -235,7 +235,7 @@
"addMcpNotesLabel": "Notes (optional)", "addMcpNotesLabel": "Notes (optional)",
"addMcpAddButton": "Add + discover", "addMcpAddButton": "Add + discover",
"addN8nTitle": "Add n8n endpoint", "addN8nTitle": "Add n8n endpoint",
"addN8nIntro": "Active workflows surface in the Store as `n8n.<name>.<workflow_slug>` capabilities.", "addN8nIntro": "Active workflows surface in the Store as n8n.<name>.<workflow_slug> capabilities.",
"addN8nNameLabel": "Name (no dots)", "addN8nNameLabel": "Name (no dots)",
"addN8nNameHint": "ops", "addN8nNameHint": "ops",
"addN8nBaseUrlLabel": "Base URL (without /api/v1)", "addN8nBaseUrlLabel": "Base URL (without /api/v1)",
@ -686,7 +686,7 @@
"auditClearLogButton": "Clear log", "auditClearLogButton": "Clear log",
"modulesTitle": "Modules", "modulesTitle": "Modules",
"modulesNoneTitle": "No modules yet", "modulesNoneTitle": "No modules yet",
"modulesNoneHint": "Run `chain install <capability-name>` or check ~/.chain/modules/.", "modulesNoneHint": "Run chain install <capability-name> or check ~/.chain/modules/.",
"modulesReloadTooltip": "Reload", "modulesReloadTooltip": "Reload",
"modulesRecentActivity": "RECENT ACTIVITY", "modulesRecentActivity": "RECENT ACTIVITY",
"modulesRecentActivityHint": "last {n} install/uninstall events from the audit log", "modulesRecentActivityHint": "last {n} install/uninstall events from the audit log",
@ -701,7 +701,7 @@
"modulesActivityUninstalled": "uninstalled", "modulesActivityUninstalled": "uninstalled",
"modulesCapabilitiesLabel": "Capabilities", "modulesCapabilitiesLabel": "Capabilities",
"modulesUninstallTitle": "Uninstall module?", "modulesUninstallTitle": "Uninstall module?",
"modulesUninstallBody": "Removes {name} v{version} from this hub. Flows that reference it will fail at the next run. A `module.uninstalled` audit event is recorded.", "modulesUninstallBody": "Removes {name} v{version} from this hub. Flows that reference it will fail at the next run. A module.uninstalled audit event is recorded.",
"@modulesUninstallBody": { "@modulesUninstallBody": {
"placeholders": { "placeholders": {
"name": { "name": {
@ -746,7 +746,7 @@
"flowsTitle": "Flows", "flowsTitle": "Flows",
"flowsReloadTooltip": "Reload", "flowsReloadTooltip": "Reload",
"flowsNoneTitle": "No saved flows", "flowsNoneTitle": "No saved flows",
"flowsNoneHint": "Save a flow with `chain admin flows save <name> <flow.yaml>` and it shows up here.", "flowsNoneHint": "Save a flow with chain admin flows save <name> <flow.yaml> and it shows up here.",
"flowsRunDialogTitle": "Run {name}", "flowsRunDialogTitle": "Run {name}",
"@flowsRunDialogTitle": { "@flowsRunDialogTitle": {
"placeholders": { "placeholders": {
@ -914,7 +914,7 @@
}, },
"storeAdvisoryVersionTooltip": "Federated upstream service — version is advisory; the upstream may break compatibility without bumping it.", "storeAdvisoryVersionTooltip": "Federated upstream service — version is advisory; the upstream may break compatibility without bumping it.",
"uninstallVersionPickerTitle": "Pick a version to uninstall", "uninstallVersionPickerTitle": "Pick a version to uninstall",
"uninstallVersionPickerBody": "Several versions of `{module}` are installed side-by-side. Select the exact version to remove — the others stay in place.", "uninstallVersionPickerBody": "Several versions of {module} are installed side-by-side. Select the exact version to remove — the others stay in place.",
"@uninstallVersionPickerBody": { "@uninstallVersionPickerBody": {
"placeholders": { "placeholders": {
"module": { "module": {
@ -924,7 +924,7 @@
}, },
"uninstallVersionPickerContinue": "Continue", "uninstallVersionPickerContinue": "Continue",
"defaultScopeHeader": "DEFAULT SCOPE", "defaultScopeHeader": "DEFAULT SCOPE",
"defaultScopeBlurb": "Ordered list of publisher segments the hub consults when a flow names a capability without an explicit `<provider>/` prefix. First match wins — promote the segments your team uses most to the top. Catalog-known publishers appear as chips; arbitrary entries are accepted for private segments.", "defaultScopeBlurb": "Ordered list of publisher segments the hub consults when a flow names a capability without an explicit <provider>/ prefix. First match wins — promote the segments your team uses most to the top. Catalog-known publishers appear as chips; arbitrary entries are accepted for private segments.",
"defaultScopeAddLabel": "Add publisher segment", "defaultScopeAddLabel": "Add publisher segment",
"defaultScopeAddHint": "e.g. acme.team", "defaultScopeAddHint": "e.g. acme.team",
"defaultScopeAddButton": "Add", "defaultScopeAddButton": "Add",
@ -952,7 +952,7 @@
"welcomeChecklistNextTodayBody": "Run tools/today/propose.sh on a cron and the editorial card on the store auto-fills with operator-curated narratives.", "welcomeChecklistNextTodayBody": "Run tools/today/propose.sh on a cron and the editorial card on the store auto-fills with operator-curated narratives.",
"welcomeChecklistNextTodayButton": "Open Today docs", "welcomeChecklistNextTodayButton": "Open Today docs",
"welcomeChecklistNextModuleTitle": "Build your own module", "welcomeChecklistNextModuleTitle": "Build your own module",
"welcomeChecklistNextModuleBody": "Generate a Rust+WASM scaffold with `chain new module <name>`. The module-sdk handles the WIT plumbing; you write a typed invoke.", "welcomeChecklistNextModuleBody": "Generate a Rust+WASM scaffold with chain new module <name>. The module-sdk handles the WIT plumbing; you write a typed invoke.",
"welcomeChecklistNextModuleButton": "Read the docs", "welcomeChecklistNextModuleButton": "Read the docs",
"auditGroupToday": "TODAY", "auditGroupToday": "TODAY",
"auditGroupYesterday": "YESTERDAY", "auditGroupYesterday": "YESTERDAY",
@ -1051,15 +1051,15 @@
"errNotFoundHint": "The item you asked for isn't here — it may have been removed or never existed.", "errNotFoundHint": "The item you asked for isn't here — it may have been removed or never existed.",
"errAlreadyExists": "Already exists.", "errAlreadyExists": "Already exists.",
"errPermissionDenied": "Permission denied.", "errPermissionDenied": "Permission denied.",
"errPermissionDeniedHint": "The hub's operator policy blocks this action. Check `~/.chain/config.yaml`.", "errPermissionDeniedHint": "The hub's operator policy blocks this action. Check ~/.chain/config.yaml.",
"errFailedPrecondition": "Setup issue blocked this.", "errFailedPrecondition": "Setup issue blocked this.",
"errFailedPreconditionHint": "The hub couldn't proceed because something it needs isn't ready. The detail below explains what.", "errFailedPreconditionHint": "The hub couldn't proceed because something it needs isn't ready. The detail below explains what.",
"errInternal": "Unexpected internal error.", "errInternal": "Unexpected internal error.",
"errInternalHint": "Check the hub logs at `~/.chain/logs/`. If this repeats, please report it.", "errInternalHint": "Check the hub logs at ~/.chain/logs/. If this repeats, please report it.",
"errUnavailable": "Hub not reachable.", "errUnavailable": "Hub not reachable.",
"errUnavailableHint": "Make sure `chain serve` (or `chain daemon start`) is running and the daemon endpoint matches Studio's settings.", "errUnavailableHint": "Make sure chain serve (or chain daemon start) is running and the daemon endpoint matches Studio's settings.",
"errUnauthenticated": "Authentication required.", "errUnauthenticated": "Authentication required.",
"errUnauthenticatedHint": "Set `CHAIN_REGISTRY_TOKEN` or sign in through Settings before retrying.", "errUnauthenticatedHint": "Set CHAIN_REGISTRY_TOKEN or sign in through Settings before retrying.",
"errCopyDetail": "Copy detail", "errCopyDetail": "Copy detail",
"errDetailCopied": "Detail copied to clipboard.", "errDetailCopied": "Detail copied to clipboard.",
"flowsOutputUnknown": "Output payload variant not recognised.", "flowsOutputUnknown": "Output payload variant not recognised.",
@ -1288,7 +1288,7 @@
"doctorStatusUnknown": "Daemon status: …", "doctorStatusUnknown": "Daemon status: …",
"doctorPillRunning": "running", "doctorPillRunning": "running",
"doctorPillStopped": "stopped", "doctorPillStopped": "stopped",
"doctorDaemonControlHint": "Studio shells out to the platform binary — mirrors `chain daemon …` exactly so the CLI and UI stay in lockstep.", "doctorDaemonControlHint": "Studio shells out to the platform binary — mirrors chain daemon … exactly so the CLI and UI stay in lockstep.",
"doctorDaemonControlWorking": "Working…", "doctorDaemonControlWorking": "Working…",
"doctorPathLog": "Log", "doctorPathLog": "Log",
"doctorPathConfig": "Config", "doctorPathConfig": "Config",
@ -1296,7 +1296,7 @@
"doctorPathModules": "Modules dir", "doctorPathModules": "Modules dir",
"doctorPathFlows": "Flows dir", "doctorPathFlows": "Flows dir",
"doctorPathPid": "PID file", "doctorPathPid": "PID file",
"doctorPathsEmpty": "Daemon did not report file paths. Update the running hub via `chain daemon restart`.", "doctorPathsEmpty": "Daemon did not report file paths. Update the running hub via chain daemon restart.",
"doctorOpenError": "Could not open: {detail}", "doctorOpenError": "Could not open: {detail}",
"@doctorOpenError": { "@doctorOpenError": {
"placeholders": { "placeholders": {
@ -1313,7 +1313,7 @@
} }
} }
}, },
"doctorUpdateBody": "Channel {channel} now offers {version}. Apply via the button — Studio shells out to `chain update apply --channel {channel}`.", "doctorUpdateBody": "Channel {channel} now offers {version}. Apply via the button — Studio shells out to chain update apply --channel {channel}.",
"@doctorUpdateBody": { "@doctorUpdateBody": {
"placeholders": { "placeholders": {
"channel": { "channel": {
@ -1347,13 +1347,13 @@
"doctorApplying": "Applying…", "doctorApplying": "Applying…",
"doctorApplyDone": "Update applied. Restart Studio to see the new daemon version.", "doctorApplyDone": "Update applied. Restart Studio to see the new daemon version.",
"mcpHeader": "MCP CLIENTS", "mcpHeader": "MCP CLIENTS",
"mcpHint": "External MCP servers federate their tools as `mcp.<server>.<tool>` capabilities. Configure once, see them in the Store.", "mcpHint": "External MCP servers federate their tools as mcp.<server>.<tool> capabilities. Configure once, see them in the Store.",
"mcpEmpty": "No MCP servers configured. Click + to add one.", "mcpEmpty": "No MCP servers configured. Click + to add one.",
"n8nHeader": "N8N ENDPOINTS", "n8nHeader": "N8N ENDPOINTS",
"n8nHint": "Active n8n workflows surface as `n8n.<endpoint>.<slug>` capabilities. Configure once, see them in the Store.", "n8nHint": "Active n8n workflows surface as n8n.<endpoint>.<slug> capabilities. Configure once, see them in the Store.",
"n8nEmpty": "No n8n endpoints configured. Click + to add one.", "n8nEmpty": "No n8n endpoints configured. Click + to add one.",
"hubUnreachable": "Hub unreachable", "hubUnreachable": "Hub unreachable",
"hubUnreachableHint": "Start the hub with `chain serve`.", "hubUnreachableHint": "Start the hub with chain serve.",
"languageEnglish": "English", "languageEnglish": "English",
"languageGerman": "Deutsch", "languageGerman": "Deutsch",
"searchHint": "Jump anywhere — modules, store, flows, pages…", "searchHint": "Jump anywhere — modules, store, flows, pages…",
@ -1408,7 +1408,7 @@
"systemAiEndpointLabel": "Endpoint URL (up to /v1)", "systemAiEndpointLabel": "Endpoint URL (up to /v1)",
"systemAiApiKeyRequired": "API key env var (required)", "systemAiApiKeyRequired": "API key env var (required)",
"systemAiApiKeyOptional": "API key env var (optional)", "systemAiApiKeyOptional": "API key env var (optional)",
"systemAiApiKeyDisclaimer": "Studio never reads or stores the key value — only its env-var name. The hub reads `${name}` at request time.", "systemAiApiKeyDisclaimer": "Studio never reads or stores the key value — only its env-var name. The hub reads ${name} at request time.",
"@systemAiApiKeyDisclaimer": { "@systemAiApiKeyDisclaimer": {
"placeholders": { "placeholders": {
"name": { "name": {
@ -1647,7 +1647,7 @@
} }
}, },
"addSourceTitle": "Add module source", "addSourceTitle": "Add module source",
"addSourceIntro": "`{capability}` is not in the public store. Point the hub at a `.chain` bundle URL or a local bundle path; the hub downloads, verifies (sha256 + signature) and installs it.", "addSourceIntro": "{capability} is not in the public store. Point the hub at a .chain bundle URL or a local bundle path; the hub downloads, verifies (sha256 + signature) and installs it.",
"@addSourceIntro": { "@addSourceIntro": {
"placeholders": { "placeholders": {
"capability": {"type": "String"} "capability": {"type": "String"}
@ -1656,7 +1656,7 @@
"addSourceField": "URL or path to .chain bundle", "addSourceField": "URL or path to .chain bundle",
"addSourceHint": "https://git.flemming.ai/your-org/your-module/releases/download/v0.1.0/foo-0.1.0.chain", "addSourceHint": "https://git.flemming.ai/your-org/your-module/releases/download/v0.1.0/foo-0.1.0.chain",
"addSourceHowItWorksTitle": "How private modules work", "addSourceHowItWorksTitle": "How private modules work",
"addSourceHowItWorksBody": "A module is a directory with a module.yaml + the WASM artifact. To share it: pack it (`chain pack <dir>`) and host the resulting `.chain` bundle anywhere (your own Forgejo / GitHub / S3). The hub installs by URL and verifies the signature against its trust store.\n\nDeveloping locally? Use the CLI — Studio cannot install from an unpacked directory (yet):", "addSourceHowItWorksBody": "A module is a directory with a module.yaml + the WASM artifact. To share it: pack it (chain pack <dir>) and host the resulting .chain bundle anywhere (your own Forgejo / GitHub / S3). The hub installs by URL and verifies the signature against its trust store.\n\nDeveloping locally? Use the CLI — Studio cannot install from an unpacked directory (yet):",
"addSourceCliExample": "chain install --link /path/to/module", "addSourceCliExample": "chain install --link /path/to/module",
"addSourceInstallButton": "Install", "addSourceInstallButton": "Install",
"addSourceCancel": "Cancel", "addSourceCancel": "Cancel",
@ -1684,12 +1684,12 @@
"detail": {"type": "String"} "detail": {"type": "String"}
} }
}, },
"chainBinaryNotFound": "Could not find the `chain` program on this machine.", "chainBinaryNotFound": "Could not find the chain program on this machine.",
"chainBinaryNotFoundHint": "Install the Ch∆In platform, or point Studio at an existing `chain` binary.", "chainBinaryNotFoundHint": "Install the Ch∆In platform, or point Studio at an existing chain binary.",
"chainBinaryLocateButton": "Locate `chain` binary…", "chainBinaryLocateButton": "Locate chain binary…",
"chainBinaryInstallDocsButton": "Open install guide", "chainBinaryInstallDocsButton": "Open install guide",
"chainBinaryPickerTitle": "Select the `chain` binary", "chainBinaryPickerTitle": "Select the chain binary",
"chainBinarySetOk": "Using `chain` binary at {path}", "chainBinarySetOk": "Using chain binary at {path}",
"@chainBinarySetOk": { "@chainBinarySetOk": {
"placeholders": { "placeholders": {
"path": {"type": "String"} "path": {"type": "String"}
@ -1719,7 +1719,7 @@
"detail": {"type": "String"} "detail": {"type": "String"}
} }
}, },
"providerDescOllama": "Local `ollama serve`. Models stay on your machine. No API key needed.", "providerDescOllama": "Local ollama serve. Models stay on your machine. No API key needed.",
"providerDescOpenai": "OpenAI hosted API. Requires an API key. Data leaves your machine.", "providerDescOpenai": "OpenAI hosted API. Requires an API key. Data leaves your machine.",
"providerDescLmstudio": "Local LM Studio server. Models stay on your machine. No API key needed.", "providerDescLmstudio": "Local LM Studio server. Models stay on your machine. No API key needed.",
"providerDescVllm": "Self-hosted vLLM or any other OpenAI-compatible server. Endpoint required.", "providerDescVllm": "Self-hosted vLLM or any other OpenAI-compatible server. Endpoint required.",

View file

@ -425,7 +425,7 @@ abstract class AppLocalizations {
/// No description provided for @errApprovalTimedOutHint. /// No description provided for @errApprovalTimedOutHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'No reviewer decided within the configured time. Raise `timeout_seconds` on the approval step or alert the reviewer.'** /// **'No reviewer decided within the configured time. Raise timeout_seconds on the approval step or alert the reviewer.'**
String get errApprovalTimedOutHint; String get errApprovalTimedOutHint;
/// No description provided for @errOutputTooLarge. /// No description provided for @errOutputTooLarge.
@ -437,7 +437,7 @@ abstract class AppLocalizations {
/// No description provided for @errOutputTooLargeHint. /// No description provided for @errOutputTooLargeHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Either trim the output (truncate text, downsample bytes) or raise `max_output_size_mb` in the operator config.'** /// **'Either trim the output (truncate text, downsample bytes) or raise max_output_size_mb in the operator config.'**
String get errOutputTooLargeHint; String get errOutputTooLargeHint;
/// No description provided for @errServiceUnavailableForStep. /// No description provided for @errServiceUnavailableForStep.
@ -449,7 +449,7 @@ abstract class AppLocalizations {
/// No description provided for @errServiceUnavailableForStepHint. /// No description provided for @errServiceUnavailableForStepHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'The module requires a service (e.g. ollama, playwright) the operator hasn\'t declared. Add it under `services:` in ~/.chain/config.yaml.'** /// **'The module requires a service (e.g. ollama, playwright) the operator hasn\'t declared. Add it under services: in ~/.chain/config.yaml.'**
String get errServiceUnavailableForStepHint; String get errServiceUnavailableForStepHint;
/// No description provided for @errMissingValue. /// No description provided for @errMissingValue.
@ -461,7 +461,7 @@ abstract class AppLocalizations {
/// No description provided for @errMissingValueHint. /// No description provided for @errMissingValueHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'The step expected an input that wasn\'t wired up — either supply it at run time or fix the upstream `\$ref`.'** /// **'The step expected an input that wasn\'t wired up — either supply it at run time or fix the upstream \$ref.'**
String get errMissingValueHint; String get errMissingValueHint;
/// No description provided for @errMcpUnreachable. /// No description provided for @errMcpUnreachable.
@ -1115,7 +1115,7 @@ abstract class AppLocalizations {
/// No description provided for @addMcpIntro. /// No description provided for @addMcpIntro.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Tools the server advertises via `tools/list` appear in the Store as `mcp.<name>.<tool>` capabilities.'** /// **'Tools the server advertises via tools/list appear in the Store as mcp.<name>.<tool> capabilities.'**
String get addMcpIntro; String get addMcpIntro;
/// No description provided for @addMcpSuggestionsLabel. /// No description provided for @addMcpSuggestionsLabel.
@ -1181,7 +1181,7 @@ abstract class AppLocalizations {
/// No description provided for @addN8nIntro. /// No description provided for @addN8nIntro.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Active workflows surface in the Store as `n8n.<name>.<workflow_slug>` capabilities.'** /// **'Active workflows surface in the Store as n8n.<name>.<workflow_slug> capabilities.'**
String get addN8nIntro; String get addN8nIntro;
/// No description provided for @addN8nNameLabel. /// No description provided for @addN8nNameLabel.
@ -2351,7 +2351,7 @@ abstract class AppLocalizations {
/// No description provided for @modulesNoneHint. /// No description provided for @modulesNoneHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Run `chain install <capability-name>` or check ~/.chain/modules/.'** /// **'Run chain install <capability-name> or check ~/.chain/modules/.'**
String get modulesNoneHint; String get modulesNoneHint;
/// No description provided for @modulesReloadTooltip. /// No description provided for @modulesReloadTooltip.
@ -2399,7 +2399,7 @@ abstract class AppLocalizations {
/// No description provided for @modulesUninstallBody. /// No description provided for @modulesUninstallBody.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Removes {name} v{version} from this hub. Flows that reference it will fail at the next run. A `module.uninstalled` audit event is recorded.'** /// **'Removes {name} v{version} from this hub. Flows that reference it will fail at the next run. A module.uninstalled audit event is recorded.'**
String modulesUninstallBody(String name, String version); String modulesUninstallBody(String name, String version);
/// No description provided for @modulesUninstalledToast. /// No description provided for @modulesUninstalledToast.
@ -2465,7 +2465,7 @@ abstract class AppLocalizations {
/// No description provided for @flowsNoneHint. /// No description provided for @flowsNoneHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Save a flow with `chain admin flows save <name> <flow.yaml>` and it shows up here.'** /// **'Save a flow with chain admin flows save <name> <flow.yaml> and it shows up here.'**
String get flowsNoneHint; String get flowsNoneHint;
/// No description provided for @flowsRunDialogTitle. /// No description provided for @flowsRunDialogTitle.
@ -2909,7 +2909,7 @@ abstract class AppLocalizations {
/// No description provided for @uninstallVersionPickerBody. /// No description provided for @uninstallVersionPickerBody.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Several versions of `{module}` are installed side-by-side. Select the exact version to remove — the others stay in place.'** /// **'Several versions of {module} are installed side-by-side. Select the exact version to remove — the others stay in place.'**
String uninstallVersionPickerBody(String module); String uninstallVersionPickerBody(String module);
/// No description provided for @uninstallVersionPickerContinue. /// No description provided for @uninstallVersionPickerContinue.
@ -2927,7 +2927,7 @@ abstract class AppLocalizations {
/// No description provided for @defaultScopeBlurb. /// No description provided for @defaultScopeBlurb.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Ordered list of publisher segments the hub consults when a flow names a capability without an explicit `<provider>/` prefix. First match wins — promote the segments your team uses most to the top. Catalog-known publishers appear as chips; arbitrary entries are accepted for private segments.'** /// **'Ordered list of publisher segments the hub consults when a flow names a capability without an explicit <provider>/ prefix. First match wins — promote the segments your team uses most to the top. Catalog-known publishers appear as chips; arbitrary entries are accepted for private segments.'**
String get defaultScopeBlurb; String get defaultScopeBlurb;
/// No description provided for @defaultScopeAddLabel. /// No description provided for @defaultScopeAddLabel.
@ -3095,7 +3095,7 @@ abstract class AppLocalizations {
/// No description provided for @welcomeChecklistNextModuleBody. /// No description provided for @welcomeChecklistNextModuleBody.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Generate a Rust+WASM scaffold with `chain new module <name>`. The module-sdk handles the WIT plumbing; you write a typed invoke.'** /// **'Generate a Rust+WASM scaffold with chain new module <name>. The module-sdk handles the WIT plumbing; you write a typed invoke.'**
String get welcomeChecklistNextModuleBody; String get welcomeChecklistNextModuleBody;
/// No description provided for @welcomeChecklistNextModuleButton. /// No description provided for @welcomeChecklistNextModuleButton.
@ -3275,7 +3275,7 @@ abstract class AppLocalizations {
/// No description provided for @errPermissionDeniedHint. /// No description provided for @errPermissionDeniedHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'The hub\'s operator policy blocks this action. Check `~/.chain/config.yaml`.'** /// **'The hub\'s operator policy blocks this action. Check ~/.chain/config.yaml.'**
String get errPermissionDeniedHint; String get errPermissionDeniedHint;
/// No description provided for @errFailedPrecondition. /// No description provided for @errFailedPrecondition.
@ -3299,7 +3299,7 @@ abstract class AppLocalizations {
/// No description provided for @errInternalHint. /// No description provided for @errInternalHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Check the hub logs at `~/.chain/logs/`. If this repeats, please report it.'** /// **'Check the hub logs at ~/.chain/logs/. If this repeats, please report it.'**
String get errInternalHint; String get errInternalHint;
/// No description provided for @errUnavailable. /// No description provided for @errUnavailable.
@ -3311,7 +3311,7 @@ abstract class AppLocalizations {
/// No description provided for @errUnavailableHint. /// No description provided for @errUnavailableHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Make sure `chain serve` (or `chain daemon start`) is running and the daemon endpoint matches Studio\'s settings.'** /// **'Make sure chain serve (or chain daemon start) is running and the daemon endpoint matches Studio\'s settings.'**
String get errUnavailableHint; String get errUnavailableHint;
/// No description provided for @errUnauthenticated. /// No description provided for @errUnauthenticated.
@ -3323,7 +3323,7 @@ abstract class AppLocalizations {
/// No description provided for @errUnauthenticatedHint. /// No description provided for @errUnauthenticatedHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Set `CHAIN_REGISTRY_TOKEN` or sign in through Settings before retrying.'** /// **'Set CHAIN_REGISTRY_TOKEN or sign in through Settings before retrying.'**
String get errUnauthenticatedHint; String get errUnauthenticatedHint;
/// No description provided for @errCopyDetail. /// No description provided for @errCopyDetail.
@ -3821,7 +3821,7 @@ abstract class AppLocalizations {
/// No description provided for @doctorDaemonControlHint. /// No description provided for @doctorDaemonControlHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Studio shells out to the platform binary — mirrors `chain daemon …` exactly so the CLI and UI stay in lockstep.'** /// **'Studio shells out to the platform binary — mirrors chain daemon … exactly so the CLI and UI stay in lockstep.'**
String get doctorDaemonControlHint; String get doctorDaemonControlHint;
/// No description provided for @doctorDaemonControlWorking. /// No description provided for @doctorDaemonControlWorking.
@ -3869,7 +3869,7 @@ abstract class AppLocalizations {
/// No description provided for @doctorPathsEmpty. /// No description provided for @doctorPathsEmpty.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Daemon did not report file paths. Update the running hub via `chain daemon restart`.'** /// **'Daemon did not report file paths. Update the running hub via chain daemon restart.'**
String get doctorPathsEmpty; String get doctorPathsEmpty;
/// No description provided for @doctorOpenError. /// No description provided for @doctorOpenError.
@ -3887,7 +3887,7 @@ abstract class AppLocalizations {
/// No description provided for @doctorUpdateBody. /// No description provided for @doctorUpdateBody.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Channel {channel} now offers {version}. Apply via the button — Studio shells out to `chain update apply --channel {channel}`.'** /// **'Channel {channel} now offers {version}. Apply via the button — Studio shells out to chain update apply --channel {channel}.'**
String doctorUpdateBody(String channel, String version); String doctorUpdateBody(String channel, String version);
/// No description provided for @doctorUpdateUnreachable. /// No description provided for @doctorUpdateUnreachable.
@ -3947,7 +3947,7 @@ abstract class AppLocalizations {
/// No description provided for @mcpHint. /// No description provided for @mcpHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'External MCP servers federate their tools as `mcp.<server>.<tool>` capabilities. Configure once, see them in the Store.'** /// **'External MCP servers federate their tools as mcp.<server>.<tool> capabilities. Configure once, see them in the Store.'**
String get mcpHint; String get mcpHint;
/// No description provided for @mcpEmpty. /// No description provided for @mcpEmpty.
@ -3965,7 +3965,7 @@ abstract class AppLocalizations {
/// No description provided for @n8nHint. /// No description provided for @n8nHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Active n8n workflows surface as `n8n.<endpoint>.<slug>` capabilities. Configure once, see them in the Store.'** /// **'Active n8n workflows surface as n8n.<endpoint>.<slug> capabilities. Configure once, see them in the Store.'**
String get n8nHint; String get n8nHint;
/// No description provided for @n8nEmpty. /// No description provided for @n8nEmpty.
@ -3983,7 +3983,7 @@ abstract class AppLocalizations {
/// No description provided for @hubUnreachableHint. /// No description provided for @hubUnreachableHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Start the hub with `chain serve`.'** /// **'Start the hub with chain serve.'**
String get hubUnreachableHint; String get hubUnreachableHint;
/// No description provided for @languageEnglish. /// No description provided for @languageEnglish.
@ -4145,7 +4145,7 @@ abstract class AppLocalizations {
/// No description provided for @systemAiApiKeyDisclaimer. /// No description provided for @systemAiApiKeyDisclaimer.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Studio never reads or stores the key value — only its env-var name. The hub reads `\${name}` at request time.'** /// **'Studio never reads or stores the key value — only its env-var name. The hub reads \${name} at request time.'**
String systemAiApiKeyDisclaimer(String name); String systemAiApiKeyDisclaimer(String name);
/// No description provided for @systemAiTestConnection. /// No description provided for @systemAiTestConnection.
@ -4919,7 +4919,7 @@ abstract class AppLocalizations {
/// No description provided for @addSourceIntro. /// No description provided for @addSourceIntro.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'`{capability}` is not in the public store. Point the hub at a `.chain` bundle URL or a local bundle path; the hub downloads, verifies (sha256 + signature) and installs it.'** /// **'{capability} is not in the public store. Point the hub at a .chain bundle URL or a local bundle path; the hub downloads, verifies (sha256 + signature) and installs it.'**
String addSourceIntro(String capability); String addSourceIntro(String capability);
/// No description provided for @addSourceField. /// No description provided for @addSourceField.
@ -4943,7 +4943,7 @@ abstract class AppLocalizations {
/// No description provided for @addSourceHowItWorksBody. /// No description provided for @addSourceHowItWorksBody.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'A module is a directory with a module.yaml + the WASM artifact. To share it: pack it (`chain pack <dir>`) and host the resulting `.chain` bundle anywhere (your own Forgejo / GitHub / S3). The hub installs by URL and verifies the signature against its trust store.\n\nDeveloping locally? Use the CLI — Studio cannot install from an unpacked directory (yet):'** /// **'A module is a directory with a module.yaml + the WASM artifact. To share it: pack it (chain pack <dir>) and host the resulting .chain bundle anywhere (your own Forgejo / GitHub / S3). The hub installs by URL and verifies the signature against its trust store.\n\nDeveloping locally? Use the CLI — Studio cannot install from an unpacked directory (yet):'**
String get addSourceHowItWorksBody; String get addSourceHowItWorksBody;
/// No description provided for @addSourceCliExample. /// No description provided for @addSourceCliExample.
@ -5021,19 +5021,19 @@ abstract class AppLocalizations {
/// No description provided for @chainBinaryNotFound. /// No description provided for @chainBinaryNotFound.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Could not find the `chain` program on this machine.'** /// **'Could not find the chain program on this machine.'**
String get chainBinaryNotFound; String get chainBinaryNotFound;
/// No description provided for @chainBinaryNotFoundHint. /// No description provided for @chainBinaryNotFoundHint.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Install the Ch∆In platform, or point Studio at an existing `chain` binary.'** /// **'Install the Ch∆In platform, or point Studio at an existing chain binary.'**
String get chainBinaryNotFoundHint; String get chainBinaryNotFoundHint;
/// No description provided for @chainBinaryLocateButton. /// No description provided for @chainBinaryLocateButton.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Locate `chain` binary…'** /// **'Locate chain binary…'**
String get chainBinaryLocateButton; String get chainBinaryLocateButton;
/// No description provided for @chainBinaryInstallDocsButton. /// No description provided for @chainBinaryInstallDocsButton.
@ -5045,13 +5045,13 @@ abstract class AppLocalizations {
/// No description provided for @chainBinaryPickerTitle. /// No description provided for @chainBinaryPickerTitle.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Select the `chain` binary'** /// **'Select the chain binary'**
String get chainBinaryPickerTitle; String get chainBinaryPickerTitle;
/// No description provided for @chainBinarySetOk. /// No description provided for @chainBinarySetOk.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Using `chain` binary at {path}'** /// **'Using chain binary at {path}'**
String chainBinarySetOk(String path); String chainBinarySetOk(String path);
/// No description provided for @sysAiFixParse. /// No description provided for @sysAiFixParse.
@ -5111,7 +5111,7 @@ abstract class AppLocalizations {
/// No description provided for @providerDescOllama. /// No description provided for @providerDescOllama.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Local `ollama serve`. Models stay on your machine. No API key needed.'** /// **'Local ollama serve. Models stay on your machine. No API key needed.'**
String get providerDescOllama; String get providerDescOllama;
/// No description provided for @providerDescOpenai. /// No description provided for @providerDescOpenai.

View file

@ -195,7 +195,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get errApprovalTimedOutHint => String get errApprovalTimedOutHint =>
'Es wurde nicht rechtzeitig entschieden. Entweder `timeout_seconds` am Freigabe-Step erhöhen oder den Reviewer informieren.'; 'Es wurde nicht rechtzeitig entschieden. Entweder timeout_seconds am Freigabe-Step erhöhen oder den Reviewer informieren.';
@override @override
String get errOutputTooLarge => String get errOutputTooLarge =>
@ -203,21 +203,21 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get errOutputTooLargeHint => String get errOutputTooLargeHint =>
'Entweder Output kürzen (Text truncaten, Bytes komprimieren) oder `max_output_size_mb` in der Operator-Config erhöhen.'; 'Entweder Output kürzen (Text truncaten, Bytes komprimieren) oder max_output_size_mb in der Operator-Config erhöhen.';
@override @override
String get errServiceUnavailableForStep => 'Host-Service nicht konfiguriert.'; String get errServiceUnavailableForStep => 'Host-Service nicht konfiguriert.';
@override @override
String get errServiceUnavailableForStepHint => String get 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.'; '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.';
@override @override
String get errMissingValue => 'Pflichtwert fehlt.'; String get errMissingValue => 'Pflichtwert fehlt.';
@override @override
String get errMissingValueHint => String get errMissingValueHint =>
'Der Step erwartet eine Eingabe, die nicht verdrahtet ist — entweder zur Laufzeit liefern oder den vorgelagerten `\$ref` korrigieren.'; 'Der Step erwartet eine Eingabe, die nicht verdrahtet ist — entweder zur Laufzeit liefern oder den vorgelagerten \$ref korrigieren.';
@override @override
String get errMcpUnreachable => 'MCP-Endpunkt nicht erreichbar.'; String get errMcpUnreachable => 'MCP-Endpunkt nicht erreichbar.';
@ -599,7 +599,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get addMcpIntro => String get addMcpIntro =>
'Tools, die der Server via `tools/list` anbietet, erscheinen im Store als `mcp.<name>.<tool>`-Fähigkeiten.'; 'Tools, die der Server via tools/list anbietet, erscheinen im Store als mcp.<name>.<tool>-Fähigkeiten.';
@override @override
String get addMcpSuggestionsLabel => 'Vorschläge — zum Vorausfüllen klicken'; String get addMcpSuggestionsLabel => 'Vorschläge — zum Vorausfüllen klicken';
@ -633,7 +633,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get addN8nIntro => String get addN8nIntro =>
'Aktive Workflows erscheinen im Store als `n8n.<name>.<workflow_slug>`-Fähigkeiten.'; 'Aktive Workflows erscheinen im Store als n8n.<name>.<workflow_slug>-Fähigkeiten.';
@override @override
String get addN8nNameLabel => 'Name (keine Punkte)'; String get addN8nNameLabel => 'Name (keine Punkte)';
@ -1331,7 +1331,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get modulesNoneHint => String get modulesNoneHint =>
'`chain install <capability-name>` ausführen oder ~/.chain/modules/ prüfen.'; 'chain install <capability-name> ausführen oder ~/.chain/modules/ prüfen.';
@override @override
String get modulesReloadTooltip => 'Aktualisieren'; String get modulesReloadTooltip => 'Aktualisieren';
@ -1358,7 +1358,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String modulesUninstallBody(String name, String version) { String modulesUninstallBody(String name, String version) {
return 'Entfernt $name v$version von diesem Hub. Flows, die es verwenden, schlagen beim nächsten Lauf fehl. Ein `module.uninstalled`-Audit-Event wird festgehalten.'; return 'Entfernt $name v$version von diesem Hub. Flows, die es verwenden, schlagen beim nächsten Lauf fehl. Ein module.uninstalled-Audit-Event wird festgehalten.';
} }
@override @override
@ -1399,7 +1399,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get flowsNoneHint => String get flowsNoneHint =>
'Flow speichern mit `chain admin flows save <name> <flow.yaml>`, dann taucht er hier auf.'; 'Flow speichern mit chain admin flows save <name> <flow.yaml>, dann taucht er hier auf.';
@override @override
String flowsRunDialogTitle(String name) { String flowsRunDialogTitle(String name) {
@ -1673,7 +1673,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String uninstallVersionPickerBody(String module) { String uninstallVersionPickerBody(String module) {
return 'Mehrere Versionen von `$module` sind parallel installiert. Wählen Sie genau die Version aus, die entfernt werden soll — die anderen bleiben bestehen.'; return 'Mehrere Versionen von $module sind parallel installiert. Wählen Sie genau die Version aus, die entfernt werden soll — die anderen bleiben bestehen.';
} }
@override @override
@ -1684,7 +1684,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get defaultScopeBlurb => String get 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.'; '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.';
@override @override
String get defaultScopeAddLabel => 'Publisher-Segment hinzufügen'; String get defaultScopeAddLabel => 'Publisher-Segment hinzufügen';
@ -1779,7 +1779,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get welcomeChecklistNextModuleBody => String get 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.'; '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.';
@override @override
String get welcomeChecklistNextModuleButton => 'Doku lesen'; String get welcomeChecklistNextModuleButton => 'Doku lesen';
@ -1896,7 +1896,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get errPermissionDeniedHint => String get errPermissionDeniedHint =>
'Die Operator-Policy des Hubs blockiert diese Aktion. `~/.chain/config.yaml` prüfen.'; 'Die Operator-Policy des Hubs blockiert diese Aktion. ~/.chain/config.yaml prüfen.';
@override @override
String get errFailedPrecondition => 'Setup-Problem hat das blockiert.'; String get errFailedPrecondition => 'Setup-Problem hat das blockiert.';
@ -1910,21 +1910,21 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get errInternalHint => String get errInternalHint =>
'Hub-Logs unter `~/.chain/logs/` prüfen. Wenn das öfter passiert, bitte melden.'; 'Hub-Logs unter ~/.chain/logs/ prüfen. Wenn das öfter passiert, bitte melden.';
@override @override
String get errUnavailable => 'Hub nicht erreichbar.'; String get errUnavailable => 'Hub nicht erreichbar.';
@override @override
String get errUnavailableHint => String get errUnavailableHint =>
'Sicherstellen, dass `chain serve` (oder `chain daemon start`) läuft und der Daemon-Endpunkt zu Studios Einstellungen passt.'; 'Sicherstellen, dass chain serve (oder chain daemon start) läuft und der Daemon-Endpunkt zu Studios Einstellungen passt.';
@override @override
String get errUnauthenticated => 'Authentifizierung erforderlich.'; String get errUnauthenticated => 'Authentifizierung erforderlich.';
@override @override
String get errUnauthenticatedHint => String get errUnauthenticatedHint =>
'`CHAIN_REGISTRY_TOKEN` setzen oder in den Einstellungen anmelden, dann erneut versuchen.'; 'CHAIN_REGISTRY_TOKEN setzen oder in den Einstellungen anmelden, dann erneut versuchen.';
@override @override
String get errCopyDetail => 'Detail kopieren'; String get errCopyDetail => 'Detail kopieren';
@ -2247,7 +2247,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get doctorDaemonControlHint => String get doctorDaemonControlHint =>
'Studio ruft das Platform-Binary auf — entspricht `chain daemon …`, sodass CLI und UI im Gleichschritt bleiben.'; 'Studio ruft das Platform-Binary auf — entspricht chain daemon …, sodass CLI und UI im Gleichschritt bleiben.';
@override @override
String get doctorDaemonControlWorking => 'Wird ausgeführt…'; String get doctorDaemonControlWorking => 'Wird ausgeführt…';
@ -2272,7 +2272,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get doctorPathsEmpty => String get doctorPathsEmpty =>
'Daemon hat keine Datei-Pfade gemeldet. Hub aktualisieren via `chain daemon restart`.'; 'Daemon hat keine Datei-Pfade gemeldet. Hub aktualisieren via chain daemon restart.';
@override @override
String doctorOpenError(String detail) { String doctorOpenError(String detail) {
@ -2286,7 +2286,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String doctorUpdateBody(String channel, String version) { String doctorUpdateBody(String channel, String version) {
return 'Kanal $channel bietet jetzt $version. Per Button anwenden — Studio ruft `chain update apply --channel $channel` auf.'; return 'Kanal $channel bietet jetzt $version. Per Button anwenden — Studio ruft chain update apply --channel $channel auf.';
} }
@override @override
@ -2323,7 +2323,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get mcpHint => String get mcpHint =>
'Externe MCP-Server bringen ihre Tools als `mcp.<server>.<tool>` Fähigkeiten ein. Einmal konfigurieren, im Store sichtbar.'; 'Externe MCP-Server bringen ihre Tools als mcp.<server>.<tool> Fähigkeiten ein. Einmal konfigurieren, im Store sichtbar.';
@override @override
String get mcpEmpty => String get mcpEmpty =>
@ -2334,7 +2334,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get n8nHint => String get n8nHint =>
'Aktive n8n-Workflows erscheinen als `n8n.<endpoint>.<slug>` Fähigkeiten. Einmal konfigurieren, im Store sichtbar.'; 'Aktive n8n-Workflows erscheinen als n8n.<endpoint>.<slug> Fähigkeiten. Einmal konfigurieren, im Store sichtbar.';
@override @override
String get n8nEmpty => String get n8nEmpty =>
@ -2344,7 +2344,7 @@ class AppLocalizationsDe extends AppLocalizations {
String get hubUnreachable => 'Hub nicht erreichbar'; String get hubUnreachable => 'Hub nicht erreichbar';
@override @override
String get hubUnreachableHint => 'Hub starten mit `chain serve`.'; String get hubUnreachableHint => 'Hub starten mit chain serve.';
@override @override
String get languageEnglish => 'English'; String get languageEnglish => 'English';
@ -2437,7 +2437,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String systemAiApiKeyDisclaimer(String name) { String systemAiApiKeyDisclaimer(String name) {
return 'Studio liest oder speichert den Key-Wert nie — nur den Namen der Umgebungsvariable. Der Hub liest `\$$name` zur Anfragezeit.'; return 'Studio liest oder speichert den Key-Wert nie — nur den Namen der Umgebungsvariable. Der Hub liest \$$name zur Anfragezeit.';
} }
@override @override
@ -2894,7 +2894,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String addSourceIntro(String capability) { String addSourceIntro(String capability) {
return '`$capability` ist nicht im öffentlichen Store. Zeig dem Hub eine `.chain`-Bundle-URL oder einen lokalen Bundle-Pfad — der Hub lädt es herunter, prüft (sha256 + Signatur) und installiert.'; return '$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.';
} }
@override @override
@ -2909,7 +2909,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get addSourceHowItWorksBody => String get 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? Nimm das CLI — Studio installiert (noch) nicht aus einem unverpackten Verzeichnis:'; '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:';
@override @override
String get addSourceCliExample => 'chain install --link /pfad/zum/modul'; String get addSourceCliExample => 'chain install --link /pfad/zum/modul';
@ -2958,24 +2958,24 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get chainBinaryNotFound => String get chainBinaryNotFound =>
'Das Programm `chain` wurde auf diesem Rechner nicht gefunden.'; 'Das Programm chain wurde auf diesem Rechner nicht gefunden.';
@override @override
String get chainBinaryNotFoundHint => String get chainBinaryNotFoundHint =>
'Installieren Sie die Ch∆In-Plattform oder verweisen Sie Studio auf eine vorhandene `chain`-Datei.'; 'Installieren Sie die Ch∆In-Plattform oder verweisen Sie Studio auf eine vorhandene chain-Datei.';
@override @override
String get chainBinaryLocateButton => '`chain`-Programm suchen …'; String get chainBinaryLocateButton => 'chain-Programm suchen …';
@override @override
String get chainBinaryInstallDocsButton => 'Installationsanleitung öffnen'; String get chainBinaryInstallDocsButton => 'Installationsanleitung öffnen';
@override @override
String get chainBinaryPickerTitle => '`chain`-Programm auswählen'; String get chainBinaryPickerTitle => 'chain-Programm auswählen';
@override @override
String chainBinarySetOk(String path) { String chainBinarySetOk(String path) {
return 'Verwende `chain` unter $path'; return 'Verwende chain unter $path';
} }
@override @override
@ -3019,7 +3019,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get providerDescOllama => String get providerDescOllama =>
'Lokales `ollama serve`. Die Modelle bleiben auf Ihrem Rechner. Kein API-Schlüssel nötig.'; 'Lokales ollama serve. Die Modelle bleiben auf Ihrem Rechner. Kein API-Schlüssel nötig.';
@override @override
String get providerDescOpenai => String get providerDescOpenai =>

View file

@ -196,28 +196,28 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get errApprovalTimedOutHint => String get errApprovalTimedOutHint =>
'No reviewer decided within the configured time. Raise `timeout_seconds` on the approval step or alert the reviewer.'; 'No reviewer decided within the configured time. Raise timeout_seconds on the approval step or alert the reviewer.';
@override @override
String get errOutputTooLarge => 'Step output exceeded the size limit.'; String get errOutputTooLarge => 'Step output exceeded the size limit.';
@override @override
String get errOutputTooLargeHint => String get errOutputTooLargeHint =>
'Either trim the output (truncate text, downsample bytes) or raise `max_output_size_mb` in the operator config.'; 'Either trim the output (truncate text, downsample bytes) or raise max_output_size_mb in the operator config.';
@override @override
String get errServiceUnavailableForStep => 'Host service not configured.'; String get errServiceUnavailableForStep => 'Host service not configured.';
@override @override
String get errServiceUnavailableForStepHint => String get errServiceUnavailableForStepHint =>
'The module requires a service (e.g. ollama, playwright) the operator hasn\'t declared. Add it under `services:` in ~/.chain/config.yaml.'; 'The module requires a service (e.g. ollama, playwright) the operator hasn\'t declared. Add it under services: in ~/.chain/config.yaml.';
@override @override
String get errMissingValue => 'Required value is missing.'; String get errMissingValue => 'Required value is missing.';
@override @override
String get errMissingValueHint => String get errMissingValueHint =>
'The step expected an input that wasn\'t wired up — either supply it at run time or fix the upstream `\$ref`.'; 'The step expected an input that wasn\'t wired up — either supply it at run time or fix the upstream \$ref.';
@override @override
String get errMcpUnreachable => 'MCP endpoint unreachable.'; String get errMcpUnreachable => 'MCP endpoint unreachable.';
@ -612,7 +612,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get addMcpIntro => String get addMcpIntro =>
'Tools the server advertises via `tools/list` appear in the Store as `mcp.<name>.<tool>` capabilities.'; 'Tools the server advertises via tools/list appear in the Store as mcp.<name>.<tool> capabilities.';
@override @override
String get addMcpSuggestionsLabel => 'Suggested servers — click to pre-fill'; String get addMcpSuggestionsLabel => 'Suggested servers — click to pre-fill';
@ -646,7 +646,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get addN8nIntro => String get addN8nIntro =>
'Active workflows surface in the Store as `n8n.<name>.<workflow_slug>` capabilities.'; 'Active workflows surface in the Store as n8n.<name>.<workflow_slug> capabilities.';
@override @override
String get addN8nNameLabel => 'Name (no dots)'; String get addN8nNameLabel => 'Name (no dots)';
@ -1345,7 +1345,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get modulesNoneHint => String get modulesNoneHint =>
'Run `chain install <capability-name>` or check ~/.chain/modules/.'; 'Run chain install <capability-name> or check ~/.chain/modules/.';
@override @override
String get modulesReloadTooltip => 'Reload'; String get modulesReloadTooltip => 'Reload';
@ -1372,7 +1372,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String modulesUninstallBody(String name, String version) { String modulesUninstallBody(String name, String version) {
return 'Removes $name v$version from this hub. Flows that reference it will fail at the next run. A `module.uninstalled` audit event is recorded.'; return 'Removes $name v$version from this hub. Flows that reference it will fail at the next run. A module.uninstalled audit event is recorded.';
} }
@override @override
@ -1413,7 +1413,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get flowsNoneHint => String get flowsNoneHint =>
'Save a flow with `chain admin flows save <name> <flow.yaml>` and it shows up here.'; 'Save a flow with chain admin flows save <name> <flow.yaml> and it shows up here.';
@override @override
String flowsRunDialogTitle(String name) { String flowsRunDialogTitle(String name) {
@ -1685,7 +1685,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String uninstallVersionPickerBody(String module) { String uninstallVersionPickerBody(String module) {
return 'Several versions of `$module` are installed side-by-side. Select the exact version to remove — the others stay in place.'; return 'Several versions of $module are installed side-by-side. Select the exact version to remove — the others stay in place.';
} }
@override @override
@ -1696,7 +1696,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get defaultScopeBlurb => String get defaultScopeBlurb =>
'Ordered list of publisher segments the hub consults when a flow names a capability without an explicit `<provider>/` prefix. First match wins — promote the segments your team uses most to the top. Catalog-known publishers appear as chips; arbitrary entries are accepted for private segments.'; 'Ordered list of publisher segments the hub consults when a flow names a capability without an explicit <provider>/ prefix. First match wins — promote the segments your team uses most to the top. Catalog-known publishers appear as chips; arbitrary entries are accepted for private segments.';
@override @override
String get defaultScopeAddLabel => 'Add publisher segment'; String get defaultScopeAddLabel => 'Add publisher segment';
@ -1788,7 +1788,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get welcomeChecklistNextModuleBody => String get welcomeChecklistNextModuleBody =>
'Generate a Rust+WASM scaffold with `chain new module <name>`. The module-sdk handles the WIT plumbing; you write a typed invoke.'; 'Generate a Rust+WASM scaffold with chain new module <name>. The module-sdk handles the WIT plumbing; you write a typed invoke.';
@override @override
String get welcomeChecklistNextModuleButton => 'Read the docs'; String get welcomeChecklistNextModuleButton => 'Read the docs';
@ -1904,7 +1904,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get errPermissionDeniedHint => String get errPermissionDeniedHint =>
'The hub\'s operator policy blocks this action. Check `~/.chain/config.yaml`.'; 'The hub\'s operator policy blocks this action. Check ~/.chain/config.yaml.';
@override @override
String get errFailedPrecondition => 'Setup issue blocked this.'; String get errFailedPrecondition => 'Setup issue blocked this.';
@ -1918,21 +1918,21 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get errInternalHint => String get errInternalHint =>
'Check the hub logs at `~/.chain/logs/`. If this repeats, please report it.'; 'Check the hub logs at ~/.chain/logs/. If this repeats, please report it.';
@override @override
String get errUnavailable => 'Hub not reachable.'; String get errUnavailable => 'Hub not reachable.';
@override @override
String get errUnavailableHint => String get errUnavailableHint =>
'Make sure `chain serve` (or `chain daemon start`) is running and the daemon endpoint matches Studio\'s settings.'; 'Make sure chain serve (or chain daemon start) is running and the daemon endpoint matches Studio\'s settings.';
@override @override
String get errUnauthenticated => 'Authentication required.'; String get errUnauthenticated => 'Authentication required.';
@override @override
String get errUnauthenticatedHint => String get errUnauthenticatedHint =>
'Set `CHAIN_REGISTRY_TOKEN` or sign in through Settings before retrying.'; 'Set CHAIN_REGISTRY_TOKEN or sign in through Settings before retrying.';
@override @override
String get errCopyDetail => 'Copy detail'; String get errCopyDetail => 'Copy detail';
@ -2253,7 +2253,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get doctorDaemonControlHint => String get doctorDaemonControlHint =>
'Studio shells out to the platform binary — mirrors `chain daemon …` exactly so the CLI and UI stay in lockstep.'; 'Studio shells out to the platform binary — mirrors chain daemon … exactly so the CLI and UI stay in lockstep.';
@override @override
String get doctorDaemonControlWorking => 'Working…'; String get doctorDaemonControlWorking => 'Working…';
@ -2278,7 +2278,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get doctorPathsEmpty => String get doctorPathsEmpty =>
'Daemon did not report file paths. Update the running hub via `chain daemon restart`.'; 'Daemon did not report file paths. Update the running hub via chain daemon restart.';
@override @override
String doctorOpenError(String detail) { String doctorOpenError(String detail) {
@ -2292,7 +2292,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String doctorUpdateBody(String channel, String version) { String doctorUpdateBody(String channel, String version) {
return 'Channel $channel now offers $version. Apply via the button — Studio shells out to `chain update apply --channel $channel`.'; return 'Channel $channel now offers $version. Apply via the button — Studio shells out to chain update apply --channel $channel.';
} }
@override @override
@ -2329,7 +2329,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get mcpHint => String get mcpHint =>
'External MCP servers federate their tools as `mcp.<server>.<tool>` capabilities. Configure once, see them in the Store.'; 'External MCP servers federate their tools as mcp.<server>.<tool> capabilities. Configure once, see them in the Store.';
@override @override
String get mcpEmpty => 'No MCP servers configured. Click + to add one.'; String get mcpEmpty => 'No MCP servers configured. Click + to add one.';
@ -2339,7 +2339,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get n8nHint => String get n8nHint =>
'Active n8n workflows surface as `n8n.<endpoint>.<slug>` capabilities. Configure once, see them in the Store.'; 'Active n8n workflows surface as n8n.<endpoint>.<slug> capabilities. Configure once, see them in the Store.';
@override @override
String get n8nEmpty => 'No n8n endpoints configured. Click + to add one.'; String get n8nEmpty => 'No n8n endpoints configured. Click + to add one.';
@ -2348,7 +2348,7 @@ class AppLocalizationsEn extends AppLocalizations {
String get hubUnreachable => 'Hub unreachable'; String get hubUnreachable => 'Hub unreachable';
@override @override
String get hubUnreachableHint => 'Start the hub with `chain serve`.'; String get hubUnreachableHint => 'Start the hub with chain serve.';
@override @override
String get languageEnglish => 'English'; String get languageEnglish => 'English';
@ -2439,7 +2439,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String systemAiApiKeyDisclaimer(String name) { String systemAiApiKeyDisclaimer(String name) {
return 'Studio never reads or stores the key value — only its env-var name. The hub reads `\$$name` at request time.'; return 'Studio never reads or stores the key value — only its env-var name. The hub reads \$$name at request time.';
} }
@override @override
@ -2895,7 +2895,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String addSourceIntro(String capability) { String addSourceIntro(String capability) {
return '`$capability` is not in the public store. Point the hub at a `.chain` bundle URL or a local bundle path; the hub downloads, verifies (sha256 + signature) and installs it.'; return '$capability is not in the public store. Point the hub at a .chain bundle URL or a local bundle path; the hub downloads, verifies (sha256 + signature) and installs it.';
} }
@override @override
@ -2910,7 +2910,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get addSourceHowItWorksBody => String get addSourceHowItWorksBody =>
'A module is a directory with a module.yaml + the WASM artifact. To share it: pack it (`chain pack <dir>`) and host the resulting `.chain` bundle anywhere (your own Forgejo / GitHub / S3). The hub installs by URL and verifies the signature against its trust store.\n\nDeveloping locally? Use the CLI — Studio cannot install from an unpacked directory (yet):'; 'A module is a directory with a module.yaml + the WASM artifact. To share it: pack it (chain pack <dir>) and host the resulting .chain bundle anywhere (your own Forgejo / GitHub / S3). The hub installs by URL and verifies the signature against its trust store.\n\nDeveloping locally? Use the CLI — Studio cannot install from an unpacked directory (yet):';
@override @override
String get addSourceCliExample => 'chain install --link /path/to/module'; String get addSourceCliExample => 'chain install --link /path/to/module';
@ -2958,24 +2958,24 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get chainBinaryNotFound => String get chainBinaryNotFound =>
'Could not find the `chain` program on this machine.'; 'Could not find the chain program on this machine.';
@override @override
String get chainBinaryNotFoundHint => String get chainBinaryNotFoundHint =>
'Install the Ch∆In platform, or point Studio at an existing `chain` binary.'; 'Install the Ch∆In platform, or point Studio at an existing chain binary.';
@override @override
String get chainBinaryLocateButton => 'Locate `chain` binary…'; String get chainBinaryLocateButton => 'Locate chain binary…';
@override @override
String get chainBinaryInstallDocsButton => 'Open install guide'; String get chainBinaryInstallDocsButton => 'Open install guide';
@override @override
String get chainBinaryPickerTitle => 'Select the `chain` binary'; String get chainBinaryPickerTitle => 'Select the chain binary';
@override @override
String chainBinarySetOk(String path) { String chainBinarySetOk(String path) {
return 'Using `chain` binary at $path'; return 'Using chain binary at $path';
} }
@override @override
@ -3019,7 +3019,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get providerDescOllama => String get providerDescOllama =>
'Local `ollama serve`. Models stay on your machine. No API key needed.'; 'Local ollama serve. Models stay on your machine. No API key needed.';
@override @override
String get providerDescOpenai => String get providerDescOpenai =>

View file

@ -26,7 +26,7 @@ void main() {
r"\b(du|dich|dir|dein|deine|deiner|deinem|deinen|deins|" r"\b(du|dich|dir|dein|deine|deiner|deinem|deinen|deins|"
r"brauchst|tippst|willst|kannst|hast|bist|machst|siehst|" r"brauchst|tippst|willst|kannst|hast|bist|machst|siehst|"
r"klickst|wählst|öffnest|startest|versuchst|versuch's|" r"klickst|wählst|öffnest|startest|versuchst|versuch's|"
r"übergib|wähle|klicke|tippe)\b", r"übergib|wähle|klicke|tippe|nimm|zeig)\b",
caseSensitive: false, caseSensitive: false,
); );
final offenders = <String>[]; final offenders = <String>[];