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

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