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.",