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.",
"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.",
"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.",
"errOutputTooLargeHint": "Entweder Output kürzen (Text truncaten, Bytes komprimieren) oder max_output_size_mb in der Operator-Config erhöhen.",
"errServiceUnavailableForStep": "Host-Service nicht konfiguriert.",
"errServiceUnavailableForStepHint": "Das Modul braucht einen Service (z.B. ollama, playwright), den der Operator nicht deklariert hat. Tragen Sie ihn unter `services:` in ~/.chain/config.yaml ein.",
"errServiceUnavailableForStepHint": "Das Modul braucht einen Service (z.B. ollama, playwright), den der Operator nicht deklariert hat. Tragen Sie ihn unter services: in ~/.chain/config.yaml ein.",
"errMissingValue": "Pflichtwert fehlt.",
"errMissingValueHint": "Der Step erwartet eine Eingabe, die nicht verdrahtet ist — entweder zur Laufzeit liefern oder den vorgelagerten `$ref` korrigieren.",
"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.",
@ -216,7 +216,7 @@
"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.",
"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",
@ -227,7 +227,7 @@
"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.",
"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)",
@ -668,7 +668,7 @@
"auditClearLogButton": "Log löschen",
"modulesTitle": "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",
"modulesRecentActivity": "LETZTE AKTIVITÄT",
"modulesRecentActivityHint": "letzte {n} install/uninstall-Ereignisse aus dem Audit-Log",
@ -683,7 +683,7 @@
"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": "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": {
@ -728,7 +728,7 @@
"flowsTitle": "Flows",
"flowsReloadTooltip": "Aktualisieren",
"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": {
"placeholders": {
@ -896,7 +896,7 @@
},
"storeAdvisoryVersionTooltip": "Föderierter Upstream-Dienst — Version ist Richtwert; der Upstream kann ohne Versionsanhebung Kompatibilität brechen.",
"uninstallVersionPickerTitle": "Version zum Entfernen wählen",
"uninstallVersionPickerBody": "Mehrere Versionen von `{module}` sind parallel installiert. Wählen Sie genau die Version aus, die entfernt werden soll — die anderen bleiben bestehen.",
"uninstallVersionPickerBody": "Mehrere Versionen von {module} sind parallel installiert. Wählen Sie genau die Version aus, die entfernt werden soll — die anderen bleiben bestehen.",
"@uninstallVersionPickerBody": {
"placeholders": {
"module": {
@ -906,7 +906,7 @@
},
"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.",
"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",
@ -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.",
"welcomeChecklistNextTodayButton": "Today-Doku öffnen",
"welcomeChecklistNextModuleTitle": "Eigenes Modul bauen",
"welcomeChecklistNextModuleBody": "Für Entwickler: Mit `chain new module <name>` entsteht ein fertiges Modul-Gerüst (Rust+WASM). Das module-sdk übernimmt die technische Anbindung; Sie schreiben nur die eigentliche Logik.",
"welcomeChecklistNextModuleBody": "Für Entwickler: Mit chain new module <name> entsteht ein fertiges Modul-Gerüst (Rust+WASM). Das module-sdk übernimmt die technische Anbindung; Sie schreiben nur die eigentliche Logik.",
"welcomeChecklistNextModuleButton": "Doku lesen",
"auditGroupToday": "HEUTE",
"auditGroupYesterday": "GESTERN",
@ -1033,15 +1033,15 @@
"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.",
"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.",
"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.",
"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.",
"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.",
@ -1264,7 +1264,7 @@
"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.",
"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",
@ -1272,7 +1272,7 @@
"doctorPathModules": "Module-Verzeichnis",
"doctorPathFlows": "Flow-Verzeichnis",
"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": {
"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": {
"placeholders": {
"channel": {
@ -1323,13 +1323,13 @@
"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.",
"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.",
"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`.",
"hubUnreachableHint": "Hub starten mit chain serve.",
"languageEnglish": "English",
"languageGerman": "Deutsch",
"searchHint": "Springe überall hin — Module, Store, Flows, Seiten…",
@ -1384,7 +1384,7 @@
"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": "Studio liest oder speichert den Key-Wert nie — nur den Namen der Umgebungsvariable. Der Hub liest ${name} zur Anfragezeit.",
"@systemAiApiKeyDisclaimer": {
"placeholders": {
"name": {
@ -1623,7 +1623,7 @@
}
},
"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": {
"placeholders": {
"capability": {"type": "String"}
@ -1632,7 +1632,7 @@
"addSourceField": "URL oder Pfad zum .chain-Bundle",
"addSourceHint": "https://git.flemming.ai/ihre-org/ihr-modul/releases/download/v0.1.0/foo-0.1.0.chain",
"addSourceHowItWorksTitle": "Wie private Module funktionieren",
"addSourceHowItWorksBody": "Ein Modul ist ein Verzeichnis mit module.yaml + WASM-Artefakt. Zum Teilen: `chain pack <verzeichnis>` baut ein `.chain`-Bundle, das Sie beliebig hosten können (eigene Forgejo / GitHub / S3). Der Hub installiert per URL und prüft die Signatur gegen seinen Trust-Store.\n\nLokal entwickeln? 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",
"addSourceInstallButton": "Installieren",
"addSourceCancel": "Abbrechen",
@ -1660,12 +1660,12 @@
"detail": {"type": "String"}
}
},
"chainBinaryNotFound": "Das Programm `chain` wurde auf diesem Rechner nicht gefunden.",
"chainBinaryNotFoundHint": "Installieren Sie die Ch∆In-Plattform oder verweisen Sie Studio auf eine vorhandene `chain`-Datei.",
"chainBinaryLocateButton": "`chain`-Programm suchen …",
"chainBinaryNotFound": "Das Programm chain wurde auf diesem Rechner nicht gefunden.",
"chainBinaryNotFoundHint": "Installieren Sie die Ch∆In-Plattform oder verweisen Sie Studio auf eine vorhandene chain-Datei.",
"chainBinaryLocateButton": "chain-Programm suchen …",
"chainBinaryInstallDocsButton": "Installationsanleitung öffnen",
"chainBinaryPickerTitle": "`chain`-Programm auswählen",
"chainBinarySetOk": "Verwende `chain` unter {path}",
"chainBinaryPickerTitle": "chain-Programm auswählen",
"chainBinarySetOk": "Verwende chain unter {path}",
"@chainBinarySetOk": {
"placeholders": {
"path": {"type": "String"}
@ -1695,7 +1695,7 @@
"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.",
"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.",

View file

@ -62,13 +62,13 @@
"errApprovalRejected": "Approval rejected by reviewer.",
"errApprovalRejectedHint": "The reviewer marked this step as rejected. Check the audit log for the reviewer's reason.",
"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.",
"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.",
"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.",
"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.",
"errMcpUnreachableHint": "The MCP server didn't respond. Check the endpoint in Settings → Integrations and confirm it's running.",
"errCapabilityNotInstalled": "Required capability is not installed.",
@ -224,7 +224,7 @@
"n8nAddTooltip": "Add n8n endpoint",
"n8nRemoveTooltip": "Remove endpoint",
"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",
"addMcpNameLabel": "Name (no dots)",
"addMcpNameHint": "filesystem",
@ -235,7 +235,7 @@
"addMcpNotesLabel": "Notes (optional)",
"addMcpAddButton": "Add + discover",
"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)",
"addN8nNameHint": "ops",
"addN8nBaseUrlLabel": "Base URL (without /api/v1)",
@ -686,7 +686,7 @@
"auditClearLogButton": "Clear log",
"modulesTitle": "Modules",
"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",
"modulesRecentActivity": "RECENT ACTIVITY",
"modulesRecentActivityHint": "last {n} install/uninstall events from the audit log",
@ -701,7 +701,7 @@
"modulesActivityUninstalled": "uninstalled",
"modulesCapabilitiesLabel": "Capabilities",
"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": {
"placeholders": {
"name": {
@ -746,7 +746,7 @@
"flowsTitle": "Flows",
"flowsReloadTooltip": "Reload",
"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": {
"placeholders": {
@ -914,7 +914,7 @@
},
"storeAdvisoryVersionTooltip": "Federated upstream service — version is advisory; the upstream may break compatibility without bumping it.",
"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": {
"placeholders": {
"module": {
@ -924,7 +924,7 @@
},
"uninstallVersionPickerContinue": "Continue",
"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",
"defaultScopeAddHint": "e.g. acme.team",
"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.",
"welcomeChecklistNextTodayButton": "Open Today docs",
"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",
"auditGroupToday": "TODAY",
"auditGroupYesterday": "YESTERDAY",
@ -1051,15 +1051,15 @@
"errNotFoundHint": "The item you asked for isn't here — it may have been removed or never existed.",
"errAlreadyExists": "Already exists.",
"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.",
"errFailedPreconditionHint": "The hub couldn't proceed because something it needs isn't ready. The detail below explains what.",
"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.",
"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.",
"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",
"errDetailCopied": "Detail copied to clipboard.",
"flowsOutputUnknown": "Output payload variant not recognised.",
@ -1288,7 +1288,7 @@
"doctorStatusUnknown": "Daemon status: …",
"doctorPillRunning": "running",
"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…",
"doctorPathLog": "Log",
"doctorPathConfig": "Config",
@ -1296,7 +1296,7 @@
"doctorPathModules": "Modules dir",
"doctorPathFlows": "Flows dir",
"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": {
"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": {
"placeholders": {
"channel": {
@ -1347,13 +1347,13 @@
"doctorApplying": "Applying…",
"doctorApplyDone": "Update applied. Restart Studio to see the new daemon version.",
"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.",
"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.",
"hubUnreachable": "Hub unreachable",
"hubUnreachableHint": "Start the hub with `chain serve`.",
"hubUnreachableHint": "Start the hub with chain serve.",
"languageEnglish": "English",
"languageGerman": "Deutsch",
"searchHint": "Jump anywhere — modules, store, flows, pages…",
@ -1408,7 +1408,7 @@
"systemAiEndpointLabel": "Endpoint URL (up to /v1)",
"systemAiApiKeyRequired": "API key env var (required)",
"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": {
"placeholders": {
"name": {
@ -1647,7 +1647,7 @@
}
},
"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": {
"placeholders": {
"capability": {"type": "String"}
@ -1656,7 +1656,7 @@
"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",
"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",
"addSourceInstallButton": "Install",
"addSourceCancel": "Cancel",
@ -1684,12 +1684,12 @@
"detail": {"type": "String"}
}
},
"chainBinaryNotFound": "Could not find the `chain` program on this machine.",
"chainBinaryNotFoundHint": "Install the Ch∆In platform, or point Studio at an existing `chain` binary.",
"chainBinaryLocateButton": "Locate `chain` binary…",
"chainBinaryNotFound": "Could not find the chain program on this machine.",
"chainBinaryNotFoundHint": "Install the Ch∆In platform, or point Studio at an existing chain binary.",
"chainBinaryLocateButton": "Locate chain binary…",
"chainBinaryInstallDocsButton": "Open install guide",
"chainBinaryPickerTitle": "Select the `chain` binary",
"chainBinarySetOk": "Using `chain` binary at {path}",
"chainBinaryPickerTitle": "Select the chain binary",
"chainBinarySetOk": "Using chain binary at {path}",
"@chainBinarySetOk": {
"placeholders": {
"path": {"type": "String"}
@ -1719,7 +1719,7 @@
"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.",
"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.",

View file

@ -425,7 +425,7 @@ abstract class AppLocalizations {
/// No description provided for @errApprovalTimedOutHint.
///
/// 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;
/// No description provided for @errOutputTooLarge.
@ -437,7 +437,7 @@ abstract class AppLocalizations {
/// No description provided for @errOutputTooLargeHint.
///
/// 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;
/// No description provided for @errServiceUnavailableForStep.
@ -449,7 +449,7 @@ abstract class AppLocalizations {
/// No description provided for @errServiceUnavailableForStepHint.
///
/// 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;
/// No description provided for @errMissingValue.
@ -461,7 +461,7 @@ abstract class AppLocalizations {
/// No description provided for @errMissingValueHint.
///
/// 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;
/// No description provided for @errMcpUnreachable.
@ -1115,7 +1115,7 @@ abstract class AppLocalizations {
/// No description provided for @addMcpIntro.
///
/// 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;
/// No description provided for @addMcpSuggestionsLabel.
@ -1181,7 +1181,7 @@ abstract class AppLocalizations {
/// No description provided for @addN8nIntro.
///
/// 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;
/// No description provided for @addN8nNameLabel.
@ -2351,7 +2351,7 @@ abstract class AppLocalizations {
/// No description provided for @modulesNoneHint.
///
/// 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;
/// No description provided for @modulesReloadTooltip.
@ -2399,7 +2399,7 @@ abstract class AppLocalizations {
/// No description provided for @modulesUninstallBody.
///
/// 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);
/// No description provided for @modulesUninstalledToast.
@ -2465,7 +2465,7 @@ abstract class AppLocalizations {
/// No description provided for @flowsNoneHint.
///
/// 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;
/// No description provided for @flowsRunDialogTitle.
@ -2909,7 +2909,7 @@ abstract class AppLocalizations {
/// No description provided for @uninstallVersionPickerBody.
///
/// 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);
/// No description provided for @uninstallVersionPickerContinue.
@ -2927,7 +2927,7 @@ abstract class AppLocalizations {
/// No description provided for @defaultScopeBlurb.
///
/// 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;
/// No description provided for @defaultScopeAddLabel.
@ -3095,7 +3095,7 @@ abstract class AppLocalizations {
/// No description provided for @welcomeChecklistNextModuleBody.
///
/// 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;
/// No description provided for @welcomeChecklistNextModuleButton.
@ -3275,7 +3275,7 @@ abstract class AppLocalizations {
/// No description provided for @errPermissionDeniedHint.
///
/// 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;
/// No description provided for @errFailedPrecondition.
@ -3299,7 +3299,7 @@ abstract class AppLocalizations {
/// No description provided for @errInternalHint.
///
/// 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;
/// No description provided for @errUnavailable.
@ -3311,7 +3311,7 @@ abstract class AppLocalizations {
/// No description provided for @errUnavailableHint.
///
/// 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;
/// No description provided for @errUnauthenticated.
@ -3323,7 +3323,7 @@ abstract class AppLocalizations {
/// No description provided for @errUnauthenticatedHint.
///
/// 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;
/// No description provided for @errCopyDetail.
@ -3821,7 +3821,7 @@ abstract class AppLocalizations {
/// No description provided for @doctorDaemonControlHint.
///
/// 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;
/// No description provided for @doctorDaemonControlWorking.
@ -3869,7 +3869,7 @@ abstract class AppLocalizations {
/// No description provided for @doctorPathsEmpty.
///
/// 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;
/// No description provided for @doctorOpenError.
@ -3887,7 +3887,7 @@ abstract class AppLocalizations {
/// No description provided for @doctorUpdateBody.
///
/// 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);
/// No description provided for @doctorUpdateUnreachable.
@ -3947,7 +3947,7 @@ abstract class AppLocalizations {
/// No description provided for @mcpHint.
///
/// 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;
/// No description provided for @mcpEmpty.
@ -3965,7 +3965,7 @@ abstract class AppLocalizations {
/// No description provided for @n8nHint.
///
/// 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;
/// No description provided for @n8nEmpty.
@ -3983,7 +3983,7 @@ abstract class AppLocalizations {
/// No description provided for @hubUnreachableHint.
///
/// In en, this message translates to:
/// **'Start the hub with `chain serve`.'**
/// **'Start the hub with chain serve.'**
String get hubUnreachableHint;
/// No description provided for @languageEnglish.
@ -4145,7 +4145,7 @@ abstract class AppLocalizations {
/// No description provided for @systemAiApiKeyDisclaimer.
///
/// 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);
/// No description provided for @systemAiTestConnection.
@ -4919,7 +4919,7 @@ abstract class AppLocalizations {
/// No description provided for @addSourceIntro.
///
/// 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);
/// No description provided for @addSourceField.
@ -4943,7 +4943,7 @@ abstract class AppLocalizations {
/// No description provided for @addSourceHowItWorksBody.
///
/// 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;
/// No description provided for @addSourceCliExample.
@ -5021,19 +5021,19 @@ abstract class AppLocalizations {
/// No description provided for @chainBinaryNotFound.
///
/// 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;
/// No description provided for @chainBinaryNotFoundHint.
///
/// 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;
/// No description provided for @chainBinaryLocateButton.
///
/// In en, this message translates to:
/// **'Locate `chain` binary…'**
/// **'Locate chain binary…'**
String get chainBinaryLocateButton;
/// No description provided for @chainBinaryInstallDocsButton.
@ -5045,13 +5045,13 @@ abstract class AppLocalizations {
/// No description provided for @chainBinaryPickerTitle.
///
/// In en, this message translates to:
/// **'Select the `chain` binary'**
/// **'Select the chain binary'**
String get chainBinaryPickerTitle;
/// No description provided for @chainBinarySetOk.
///
/// In en, this message translates to:
/// **'Using `chain` binary at {path}'**
/// **'Using chain binary at {path}'**
String chainBinarySetOk(String path);
/// No description provided for @sysAiFixParse.
@ -5111,7 +5111,7 @@ abstract class AppLocalizations {
/// No description provided for @providerDescOllama.
///
/// 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;
/// No description provided for @providerDescOpenai.

View file

@ -195,7 +195,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get errOutputTooLarge =>
@ -203,21 +203,21 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get errServiceUnavailableForStep => 'Host-Service nicht konfiguriert.';
@override
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
String get errMissingValue => 'Pflichtwert fehlt.';
@override
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
String get errMcpUnreachable => 'MCP-Endpunkt nicht erreichbar.';
@ -599,7 +599,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get addMcpSuggestionsLabel => 'Vorschläge — zum Vorausfüllen klicken';
@ -633,7 +633,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get addN8nNameLabel => 'Name (keine Punkte)';
@ -1331,7 +1331,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get modulesReloadTooltip => 'Aktualisieren';
@ -1358,7 +1358,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
@ -1399,7 +1399,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String flowsRunDialogTitle(String name) {
@ -1673,7 +1673,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
@ -1684,7 +1684,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get defaultScopeAddLabel => 'Publisher-Segment hinzufügen';
@ -1779,7 +1779,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get welcomeChecklistNextModuleButton => 'Doku lesen';
@ -1896,7 +1896,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get errFailedPrecondition => 'Setup-Problem hat das blockiert.';
@ -1910,21 +1910,21 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get errUnavailable => 'Hub nicht erreichbar.';
@override
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
String get errUnauthenticated => 'Authentifizierung erforderlich.';
@override
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
String get errCopyDetail => 'Detail kopieren';
@ -2247,7 +2247,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get doctorDaemonControlWorking => 'Wird ausgeführt…';
@ -2272,7 +2272,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String doctorOpenError(String detail) {
@ -2286,7 +2286,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
@ -2323,7 +2323,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get mcpEmpty =>
@ -2334,7 +2334,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get n8nEmpty =>
@ -2344,7 +2344,7 @@ class AppLocalizationsDe extends AppLocalizations {
String get hubUnreachable => 'Hub nicht erreichbar';
@override
String get hubUnreachableHint => 'Hub starten mit `chain serve`.';
String get hubUnreachableHint => 'Hub starten mit chain serve.';
@override
String get languageEnglish => 'English';
@ -2437,7 +2437,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
@ -2894,7 +2894,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
@ -2909,7 +2909,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get addSourceCliExample => 'chain install --link /pfad/zum/modul';
@ -2958,24 +2958,24 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get chainBinaryNotFound =>
'Das Programm `chain` wurde auf diesem Rechner nicht gefunden.';
'Das Programm chain wurde auf diesem Rechner nicht gefunden.';
@override
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
String get chainBinaryLocateButton => '`chain`-Programm suchen …';
String get chainBinaryLocateButton => 'chain-Programm suchen …';
@override
String get chainBinaryInstallDocsButton => 'Installationsanleitung öffnen';
@override
String get chainBinaryPickerTitle => '`chain`-Programm auswählen';
String get chainBinaryPickerTitle => 'chain-Programm auswählen';
@override
String chainBinarySetOk(String path) {
return 'Verwende `chain` unter $path';
return 'Verwende chain unter $path';
}
@override
@ -3019,7 +3019,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
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
String get providerDescOpenai =>

View file

@ -196,28 +196,28 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get errOutputTooLarge => 'Step output exceeded the size limit.';
@override
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
String get errServiceUnavailableForStep => 'Host service not configured.';
@override
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
String get errMissingValue => 'Required value is missing.';
@override
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
String get errMcpUnreachable => 'MCP endpoint unreachable.';
@ -612,7 +612,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get addMcpSuggestionsLabel => 'Suggested servers — click to pre-fill';
@ -646,7 +646,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get addN8nNameLabel => 'Name (no dots)';
@ -1345,7 +1345,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get modulesNoneHint =>
'Run `chain install <capability-name>` or check ~/.chain/modules/.';
'Run chain install <capability-name> or check ~/.chain/modules/.';
@override
String get modulesReloadTooltip => 'Reload';
@ -1372,7 +1372,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
@ -1413,7 +1413,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String flowsRunDialogTitle(String name) {
@ -1685,7 +1685,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
@ -1696,7 +1696,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get defaultScopeAddLabel => 'Add publisher segment';
@ -1788,7 +1788,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get welcomeChecklistNextModuleButton => 'Read the docs';
@ -1904,7 +1904,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get errFailedPrecondition => 'Setup issue blocked this.';
@ -1918,21 +1918,21 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get errUnavailable => 'Hub not reachable.';
@override
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
String get errUnauthenticated => 'Authentication required.';
@override
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
String get errCopyDetail => 'Copy detail';
@ -2253,7 +2253,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get doctorDaemonControlWorking => 'Working…';
@ -2278,7 +2278,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String doctorOpenError(String detail) {
@ -2292,7 +2292,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
@ -2329,7 +2329,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get mcpEmpty => 'No MCP servers configured. Click + to add one.';
@ -2339,7 +2339,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get n8nEmpty => 'No n8n endpoints configured. Click + to add one.';
@ -2348,7 +2348,7 @@ class AppLocalizationsEn extends AppLocalizations {
String get hubUnreachable => 'Hub unreachable';
@override
String get hubUnreachableHint => 'Start the hub with `chain serve`.';
String get hubUnreachableHint => 'Start the hub with chain serve.';
@override
String get languageEnglish => 'English';
@ -2439,7 +2439,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
@ -2895,7 +2895,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
@ -2910,7 +2910,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get addSourceCliExample => 'chain install --link /path/to/module';
@ -2958,24 +2958,24 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get chainBinaryNotFound =>
'Could not find the `chain` program on this machine.';
'Could not find the chain program on this machine.';
@override
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
String get chainBinaryLocateButton => 'Locate `chain` binary…';
String get chainBinaryLocateButton => 'Locate chain binary…';
@override
String get chainBinaryInstallDocsButton => 'Open install guide';
@override
String get chainBinaryPickerTitle => 'Select the `chain` binary';
String get chainBinaryPickerTitle => 'Select the chain binary';
@override
String chainBinarySetOk(String path) {
return 'Using `chain` binary at $path';
return 'Using chain binary at $path';
}
@override
@ -3019,7 +3019,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
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
String get providerDescOpenai =>