feat(studio): first-run UX, recovery affordances, l10n, bundled fonts
- Connection-aware Welcome: when the hub is down, show a hero with a primary "Start hub" CTA + install fallback instead of a dead, all-unchecked onboarding checklist (the first-run cliff). - Actionable binary-not-found (file picker + install link, not a "set FAI_BIN" dead end) and a connect-failure banner after repeated failed health polls. - Localize six hardcoded English error/toast clusters (DE+EN ARB). - Bundle Inter + JetBrains Mono as assets; drop the runtime google_fonts fetch (air-gap / KRITIS safe, no font-swap flash). Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
7511867774
commit
5313266cc4
25 changed files with 1231 additions and 234 deletions
|
|
@ -1520,5 +1520,79 @@
|
|||
"placeholders": {
|
||||
"error": {"type": "String"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"welcomeHubDownTitle": "Der Hub läuft noch nicht",
|
||||
"welcomeHubDownBody": "Studio spricht mit einem lokalen Hub — der Engine, die Module lädt und Flows ausführt. Sie ist gerade nicht erreichbar. Starte sie, um loszulegen.",
|
||||
"welcomeHubDownStart": "Hub starten",
|
||||
"welcomeHubDownStarting": "Wird gestartet …",
|
||||
"welcomeHubDownDocsLink": "Klappt der Start nicht? Zur Erste-Schritte-Anleitung",
|
||||
"welcomeHubDownEndpoint": "Endpunkt: {endpoint}",
|
||||
"@welcomeHubDownEndpoint": {
|
||||
"placeholders": {
|
||||
"endpoint": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"daemonStartRequested": "Start des Daemons angefordert. Verbinde neu …",
|
||||
"daemonStartFailed": "Daemon konnte nicht gestartet werden: {detail}",
|
||||
"@daemonStartFailed": {
|
||||
"placeholders": {
|
||||
"detail": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"faiBinaryNotFound": "Das Programm `fai` wurde auf diesem Rechner nicht gefunden.",
|
||||
"faiBinaryNotFoundHint": "Installiere die F∆I-Plattform oder verweise Studio auf eine vorhandene `fai`-Datei.",
|
||||
"faiBinaryLocateButton": "`fai`-Programm suchen …",
|
||||
"faiBinaryInstallDocsButton": "Installationsanleitung öffnen",
|
||||
"faiBinaryPickerTitle": "`fai`-Programm auswählen",
|
||||
"faiBinarySetOk": "Verwende `fai` unter {path}",
|
||||
"@faiBinarySetOk": {
|
||||
"placeholders": {
|
||||
"path": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"sysAiFixParse": "Der Anbieter hat in einem unerwarteten Format geantwortet. Anbieter, die nicht OpenAI-kompatibel sind, brauchen ggf. einen Übersetzungs-Proxy.",
|
||||
"sysAiFixUnknown": "Unerwarteter Fehler ({kind}). Siehe System-KI-Dokumentation.",
|
||||
"@sysAiFixUnknown": {
|
||||
"placeholders": {
|
||||
"kind": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"sysAiFixDisabled": "Richte die System-KI in den Einstellungen (Cmd+,) → Bereich System-KI ein.",
|
||||
"sysAiFixEnvMissing": "Die Umgebungsvariable für den API-Schlüssel ist leer. Setze sie in deiner Shell und starte den Daemon neu.",
|
||||
"sysAiFixNetwork": "Der Hub erreicht den konfigurierten Endpunkt nicht. Läuft dein Anbieter?",
|
||||
"sysAiFixHttp": "Der Anbieter hat einen Status außerhalb 2xx geliefert. Prüfe Endpunkt, Modellname und API-Schlüssel.",
|
||||
"sysAiFixEmptyResponse": "Der Anbieter hat keinen Inhalt geliefert. Probiere ein anderes Modell oder formuliere den Prompt um.",
|
||||
"channelSwitchOk": "Aktiver Kanal auf \"{name}\" umgeschaltet. Daemon neu gestartet.",
|
||||
"@channelSwitchOk": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"channelSwitchFailed": "Kanalwechsel fehlgeschlagen: {detail}",
|
||||
"@channelSwitchFailed": {
|
||||
"placeholders": {
|
||||
"detail": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"providerDescOllama": "Lokales `ollama serve`. Die Modelle bleiben auf deinem Rechner. Kein API-Schlüssel nötig.",
|
||||
"providerDescOpenai": "Gehostete OpenAI-API. Erfordert einen API-Schlüssel. Daten verlassen deinen Rechner.",
|
||||
"providerDescLmstudio": "Lokaler LM-Studio-Server. Die Modelle bleiben auf deinem Rechner. Kein API-Schlüssel nötig.",
|
||||
"providerDescVllm": "Selbst gehostetes vLLM oder ein anderer OpenAI-kompatibler Server. Endpunkt erforderlich.",
|
||||
"providerDescCustom": "Alles andere, das die OpenAI-kompatible Chat-Completions-Schnittstelle spricht (LiteLLM-Proxy, interner Spiegel, …).",
|
||||
"welcomeDocLoadFailedBody": "Die mitgelieferte Doku \"{slug}\" ({locale}) konnte nicht geladen werden.\nVersucht: {attempted}\nUrsache: {underlying}\nMeist ist der installierte Studio-Build älter als das Doku-Bundle. Baue Studio neu oder öffne die Online-Kopie.",
|
||||
"@welcomeDocLoadFailedBody": {
|
||||
"placeholders": {
|
||||
"slug": {"type": "String"},
|
||||
"locale": {"type": "String"},
|
||||
"attempted": {"type": "String"},
|
||||
"underlying": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"hubUnreachableBanner": "{endpoint} nicht erreichbar — Einstellungen öffnen",
|
||||
"@hubUnreachableBanner": {
|
||||
"placeholders": {
|
||||
"endpoint": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"hubUnreachableOpenSettings": "Einstellungen öffnen"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue