{ "@@locale": "de", "appTitle": "F∆I Studio", "navWelcome": "Willkommen", "welcomeHeroTitle": "F∆I Platform", "welcomeHeroSubtitle": "Deterministische Workflow-Engine für KI-gestützte Dokumentenverarbeitung in regulierten Umgebungen.", "welcomePillarHubTitle": "Hub", "welcomePillarHubBody": "Ein Rust-Binary, das Module lädt und Flows ausführt. SQLite für den State. Kein Docker, kein Message-Broker, keine Hintergrunddienste, die gepflegt werden müssen.", "welcomePillarModuleTitle": "Modul", "welcomePillarModuleBody": "Eine kleine WebAssembly-Komponente, die eine Sache macht. Deklariert Netzwerk-Endpunkte, Dateien und Umgebungsvariablen, auf die sie zugreift; der Hub setzt die Liste durch.", "welcomePillarFlowTitle": "Flow", "welcomePillarFlowBody": "Eine YAML-Datei, die Module verkettet. Eingaben rein, Module laufen in der deklarierten Reihenfolge, Ausgaben raus — jeder Schritt in einem hash-verketteten Audit-Log festgehalten.", "welcomeTrustHeader": "TRUST-POSTURE", "welcomeTrustSandboxTitle": "Sandbox von Anfang an", "welcomeTrustSandboxBody": "Jedes Modul bringt eine explizite Berechtigungsliste mit — Netzwerk-Endpunkte, Dateien, Umgebungsvariablen. Der Hub setzt sie durch; ohne Operator-Freigabe verlässt nichts die Sandbox.", "welcomeTrustAuditTitle": "Manipulationssicheres Audit-Log", "welcomeTrustAuditBody": "Flow-Läufe, Installationen, Deinstallationen, Freigabe-Entscheidungen — alles wird in ein hash-verkettetes Audit-Log geschrieben. Die Diagnose-Seite verifiziert die Kette bei jedem Laden komplett.", "welcomeTrustAirgapTitle": "Air-Gap-tauglich", "welcomeTrustAirgapBody": "Der gesamte Hub steckt in einem einzigen Binary für Linux, macOS und Windows. Sobald ein Modul installiert ist, läuft der Flow, der es nutzt, ohne weiteren Netzwerkzugriff — ideal für regulierte Umgebungen.", "welcomeDocsHeader": "DOKUMENTATION", "welcomeDocsBody": "Operator-Erklärungen, inline gerendert. Kein Browser, kein externer Link — air-gap-tauglich.", "welcomeDocArchitectureTitle": "Architektur in einem Absatz", "welcomeDocArchitectureBlurb": "Hub, Modul, Flow — und wie die drei zusammenpassen.", "welcomeDocSecurityTitle": "Sandbox-Modell", "welcomeDocSecurityBlurb": "Was ein Modul deklariert, was der Operator deckelt, was der Hub durchsetzt.", "welcomeDocAuditTitle": "Manipulationssicheres Audit-Log", "welcomeDocAuditBlurb": "Wie die Hash-Kette funktioniert und warum WORM-1 für KRITIS reicht.", "welcomeDocFlowsTitle": "Flow-Komposition", "welcomeDocFlowsBlurb": "YAML-Grundlagen, Templating-Referenz, das Extract→Summarize-Beispiel.", "welcomeDocClose": "Schließen", "welcomeDocFailedToLoad": "Doku konnte nicht geladen werden: {error}", "@welcomeDocFailedToLoad": { "placeholders": { "error": { "type": "String" } } }, "welcomeChecklistHeader": "ERSTE SCHRITTE", "welcomeChecklistBody": "Vier Schritte zu einem funktionierenden Hub. Live-Zustand — nach jeder Änderung aktualisieren.", "welcomeChecklistAi": "System-AI konfigurieren", "welcomeChecklistAiHint": "Einstellungen → System-AI. Wird für die KI-Suche und Fehlererklärungen gebraucht.", "welcomeChecklistMcp": "Öffentliche Capability-Quelle hinzufügen", "welcomeChecklistMcpHint": "Store → Today-Hero, oder Einstellungen → MCP-Clients. DeepWiki und Semgrep sind je ein Klick.", "welcomeChecklistModule": "Ein Text-Modul installieren", "welcomeChecklistModuleHint": "Store → nach „text\" suchen → Installieren. text.extract für PDFs und DOCX ist ein guter Start.", "welcomeChecklistFlow": "Einen gespeicherten Flow starten", "welcomeChecklistFlowHint": "Flows → einen wählen → Starten. Der mitgelieferte extract-summarize.yaml ist ein guter erster Lauf.", "welcomeChecklistAllDone": "Alle vier Schritte erledigt.", "welcomeChecklistDismiss": "Checkliste ausblenden", "welcomeChecklistRefresh": "Aktualisieren", "welcomeChecklistRefreshing": "Prüfe…", "welcomeChecklistDone": "Erledigt", "welcomeChecklistTodo": "Offen", "navDoctor": "Diagnose", "navModules": "Module", "navStore": "Store", "navFlows": "Flows", "navAudit": "Protokoll", "navApprovals": "Freigaben", "connectionConnected": "verbunden", "connectionUnreachable": "nicht erreichbar", "connectionConnecting": "verbinde…", "connectionStartHub": "Hub starten", "buttonCancel": "Abbrechen", "buttonSave": "Speichern", "buttonClose": "Schließen", "buttonRetry": "Erneut versuchen", "buttonRefresh": "Aktualisieren", "buttonInstall": "Installieren", "buttonUninstall": "Deinstallieren", "buttonDetails": "Details", "buttonAdd": "Hinzufügen", "buttonRemove": "Entfernen", "buttonOpen": "Öffnen", "buttonExplain": "Erklären", "buttonReadDocs": "Doku öffnen", "buttonCopy": "In Zwischenablage kopieren", "buttonCopied": "Kopiert", "buttonShowDetails": "Details anzeigen", "buttonHideDetails": "Details ausblenden", "storeInstallableOnly": "Nur installierbare", "storePillComingSoon": "Bald verfügbar", "storeNotInstallableInline": "Dieses Modul ist auf der Roadmap (Status: {status}). Es gibt noch kein installierbares Bundle — Repository verfolgen für Updates.", "@storeNotInstallableInline": { "placeholders": { "status": { "type": "String" } } }, "mcpSuggestionDeepwikiDesc": "Öffentliches HTTPS — KI-gestützte Doku-Suche in GitHub-Repos. Kein Node, kein API-Key.", "mcpSuggestionSemgrepDesc": "Öffentliches HTTPS — Security-Scanning von Code-Schwachstellen. Kein Node, kein API-Key.", "mcpSuggestionFilesystemDesc": "Anthropic — Dateien in /tmp lesen / schreiben. Pfad vor dem Speichern anpassen.", "mcpSuggestionFetchDesc": "Anthropic — beliebige HTTP(S)-URLs als Markdown abrufen.", "mcpSuggestionGithubDesc": "Anthropic — Issues, PRs, Repo-Dateien. Braucht einen GitHub-PAT in der Env-Variable.", "mcpSuggestionPuppeteerDesc": "Anthropic — Headless-Browser-Automation für Screenshots / Scraping.", "mcpSuggestionPostgresDesc": "Anthropic — Read-only-SQL-Queries gegen eine Postgres-Datenbank. URL anpassen.", "mcpSuggestionSqliteDesc": "Anthropic — Abfragen gegen eine lokale SQLite-Datei. Pfad anpassen.", "mcpSuggestionBraveSearchDesc": "Anthropic — Websuche via Brave. API-Key erforderlich.", "mcpSuggestionMemoryDesc": "Anthropic — persistenter Knowledge-Graph als Agenten-Gedächtnis.", "mcpSuggestionTimeDesc": "Anthropic — aktuelle Uhrzeit + Zeitzonen-Konvertierung.", "mcpServerEnLanguageBadge": "Server-Text in Englisch — Studio zeigt ihn wie geliefert.", "settingsTitle": "Hub-Endpunkt", "settingsHost": "Host", "settingsPort": "Port", "settingsTls": "TLS", "settingsSaveAndConnect": "Speichern & verbinden", "settingsLanguage": "Sprache", "settingsLanguageHint": "Sprache der App. Wirkt auf alle Seiten; mehrsprachige Store-Einträge folgen ebenfalls.", "settingsHubEndpointHint": "Wohin soll Studio sich verbinden? Standard ist der lokale Hub auf 127.0.0.1:50051.", "settingsTlsSubtitle": "https/grpc-secure", "settingsPortError": "Port muss 1–65535 sein", "channelsBlurb": "Hub-Kanal wechseln (schreibt ~/.fai/current-channel und startet den Daemon neu). Verbinden ändert nur die Wire von Studio.", "channelsActionsTooltip": "Kanal-Aktionen", "systemAiHeader": "SYSTEM-AI", "systemAiEnabled": "aktiv", "systemAiOff": "aus", "systemAiEdit": "Bearbeiten…", "systemAiConfigure": "Konfigurieren…", "systemAiOffBlurb": "Aus — Fehlererklärungen auf der Protokoll-Seite sind deaktiviert. Klicke Konfigurieren…, um einen Provider zu wählen (Ollama / OpenAI / LM Studio / vLLM / Eigene). Die Operator-Konfig wird direkt überschrieben; kein Daemon-Neustart nötig.", "mcpServersCount": "{n} {n, plural, =1{Server} other{Server}}", "@mcpServersCount": { "placeholders": { "n": { "type": "int" } } }, "mcpRediscoverTooltip": "Discovery neu ausführen", "mcpAddTooltip": "MCP-Server hinzufügen", "mcpRemoveTooltip": "Server entfernen", "mcpToolsCount": "{n} Tools", "@mcpToolsCount": { "placeholders": { "n": { "type": "int" } } }, "n8nEndpointsCount": "{n} {n, plural, =1{Endpunkt} other{Endpunkte}}", "@n8nEndpointsCount": { "placeholders": { "n": { "type": "int" } } }, "n8nWorkflowsCount": "{n} Workflows", "@n8nWorkflowsCount": { "placeholders": { "n": { "type": "int" } } }, "n8nRediscoverTooltip": "Discovery neu ausführen", "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..`-Fähigkeiten.", "addMcpSuggestionsLabel": "Vorschläge — zum Vorausfüllen klicken", "addMcpNameLabel": "Name (keine Punkte)", "addMcpNameHint": "filesystem", "addMcpEndpointLabel": "Endpunkt", "addMcpEndpointHint": "http://127.0.0.1:3001/mcp", "addMcpApiKeyLabel": "API-Key-Umgebungsvariable (optional)", "addMcpApiKeyHint": "MCP_FILESYSTEM_TOKEN", "addMcpNotesLabel": "Notizen (optional)", "addMcpAddButton": "Hinzufügen + Discovery", "addN8nTitle": "n8n-Endpunkt hinzufügen", "addN8nIntro": "Aktive Workflows erscheinen im Store als `n8n..`-Fähigkeiten.", "addN8nNameLabel": "Name (keine Punkte)", "addN8nNameHint": "ops", "addN8nBaseUrlLabel": "Basis-URL (ohne /api/v1)", "addN8nBaseUrlHint": "https://n8n.example.com", "addN8nApiKeyLabel": "API-Key-Umgebungsvariable (optional)", "addN8nApiKeyHint": "N8N_OPS_KEY", "addN8nNotesLabel": "Notizen (optional)", "addN8nAddButton": "Hinzufügen + Discovery", "addedMcpToast": "MCP-Server „{name}\" hinzugefügt.", "@addedMcpToast": { "placeholders": { "name": { "type": "String" } } }, "addedN8nToast": "n8n-Endpunkt „{name}\" hinzugefügt.", "@addedN8nToast": { "placeholders": { "name": { "type": "String" } } }, "addFailedToast": "Hinzufügen fehlgeschlagen: {error}", "@addFailedToast": { "placeholders": { "error": { "type": "String" } } }, "removeFailedToast": "Entfernen fehlgeschlagen: {error}", "@removeFailedToast": { "placeholders": { "error": { "type": "String" } } }, "refreshFailedToast": "Aktualisieren fehlgeschlagen: {error}", "@refreshFailedToast": { "placeholders": { "error": { "type": "String" } } }, "channelsHeader": "KANÄLE", "channelsActive": "aktiv", "channelsRunning": "läuft", "channelsStopped": "gestoppt", "channelsConnect": "Studio mit diesem Kanal verbinden", "channelsSwitch": "Diesen Kanal aktivieren", "channelsEnableAutostart": "Autostart bei Anmeldung aktivieren", "channelsDisableAutostart": "Autostart deaktivieren", "storeSearchHint": "Module suchen — Name, Tagline, Tag, Fähigkeit…", "storeAskHint": "Was brauchst du? Versuch's mit „ein Modul, das tabellarische Daten liest\" oder tippe einfach einen Begriff.", "storeAskSubmit": "Suchen", "storeAskAi": "KI fragen", "storeAskClear": "Frage zurücksetzen", "storeAskAiThinking": "Module werden durchsucht…", "storeAskAiUnavailable": "Konfiguriere eine System-AI in den Einstellungen, um Fragen in normaler Sprache zu stellen.", "storeAskNoMatches": "Keine Treffer — Frage verfeinern oder im Grid unten stöbern.", "storeAskAnswerLabel": "KI-Vorschlag", "storeAskAnswerWhy": "Warum es passt", "storeAskMatchPill": "Treffer", "storeFilterLabel": "Filter", "storeFilterActiveCount": "{n} aktiv", "@storeFilterActiveCount": { "placeholders": { "n": { "type": "int" } } }, "storeFilterReset": "Filter zurücksetzen", "storeFilterApply": "Fertig", "storeFilterStatusGroup": "Status", "storeFilterSourceGroup": "Quelle", "storeFilterInstalledGroup": "Nur installierte zeigen", "storeFeatured": "EMPFOHLEN", "storeFeaturedHint": "kuratierte Auswahl · klicken für Details", "storeNoMatches": "Keine Treffer", "storeNoMatchesHint": "Filter anpassen oder Suche leeren, um alle Einträge zu sehen.", "storeClearFilters": "Filter zurücksetzen", "storeStatusAll": "Alle", "storeStatusPublished": "stabil", "storeStatusAlpha": "experimentell", "storeStatusPlanned": "geplant", "storeInstalledOnly": "Installiert", "storeCategoryLabel": "Kategorie", "storeCategoryAll": "Alle Kategorien", "storeCategoryBridge": "Verbindungen", "storeCategoryDebug": "Beispiele", "storeCategoryText": "Text", "storeCategoryLlm": "KI-Modelle", "storeCategorySystem": "System", "storeCategoryAuth": "Authentifizierung", "storeCategoryStorage": "Speicher", "storeCategoryChannel": "Kanäle", "storeCategoryWeb": "Web", "storeCategoryOrchestrator": "Orchestrierung", "storeNResults": "{n} Treffer", "@storeNResults": { "placeholders": { "n": { "type": "int" } } }, "storeReloadTooltip": "Aktualisieren", "storeTodayBadge": "HEUTE", "storeTodayDeck": "Von der F∆I-Redaktion", "storeTodayDismissTooltip": "Für diese Sitzung ausblenden", "storePillInstalled": "installiert", "storePillUpdate": "Update", "storeUpdateButton": "Update auf {version}", "@storeUpdateButton": { "placeholders": { "version": { "type": "String" } } }, "storeUpdateTooltip": "Installiert {installed} — Store bietet v{best}", "@storeUpdateTooltip": { "placeholders": { "installed": { "type": "String" }, "best": { "type": "String" } } }, "storeNoTagline": "(keine Beschreibung)", "storeUninstallTitle": "Modul deinstallieren?", "storeUninstallBody": "Entfernt {name} aus diesem Hub. Flows, die es verwenden, schlagen beim nächsten Lauf fehl.", "@storeUninstallBody": { "placeholders": { "name": { "type": "String" } } }, "storeInstalledToast": "{name} v{version} installiert.", "@storeInstalledToast": { "placeholders": { "name": { "type": "String" }, "version": { "type": "String" } } }, "storeInstallFailedToast": "Installation fehlgeschlagen: {error}", "@storeInstallFailedToast": { "placeholders": { "error": { "type": "String" } } }, "storeUninstalledToast": "{name} v{version} deinstalliert.", "@storeUninstalledToast": { "placeholders": { "name": { "type": "String" }, "version": { "type": "String" } } }, "storeUninstallFailedToast": "Deinstallation fehlgeschlagen: {error}", "@storeUninstallFailedToast": { "placeholders": { "error": { "type": "String" } } }, "storeOpenBrowserFailed": "Browser konnte nicht geöffnet werden: {error}", "@storeOpenBrowserFailed": { "placeholders": { "error": { "type": "String" } } }, "storeSectionTags": "Tags", "storeSectionRequiredCapabilities": "Erforderliche Fähigkeiten", "storeSectionRequiredHostServices": "Erforderliche Host-Dienste", "storeSectionScreenshots": "Screenshots", "storeSectionDocumentation": "Dokumentation", "storeSectionSource": "Quelle", "storeSectionPermissions": "Deklarierte Berechtigungen", "storeSectionDirectory": "Modul-Verzeichnis", "storeSectionPermissionsNone": "(keine — reines Berechnungsmodul)", "storeInstallingButton": "Installiere…", "storeNotInstallable": "Nicht installierbar", "storeNotInstallableTooltip": "Status „{status}\" — Installations-Pfad noch nicht verdrahtet.", "@storeNotInstallableTooltip": { "placeholders": { "status": { "type": "String" } } }, "storeInstallProgressTitle": "Installation von {name}", "@storeInstallProgressTitle": { "placeholders": { "name": { "type": "String" } } }, "storeInstallProgressBody": "Holen, verifizieren, entpacken…", "storeLoadDocs": "Dokumentation laden", "storeDocsHint": "README inline gerendert; nutzt das Registry-Token des Hubs, falls nötig.", "storeDocsFetching": "README wird geladen…", "storeOpenRepoButton": "Repository im Browser öffnen", "storeDocsErrorNotFound": "Dieses Modul ist nicht im Store-Index des Hubs enthalten.", "storeDocsErrorNoDocs": "Für dieses Modul ist keine Repository-URL hinterlegt.", "storeDocsErrorAuth": "Die Registry erfordert Authentifizierung, um dieses README zu laden. Setze FAI_REGISTRY_TOKEN in der Umgebung des Daemons und starte den Hub neu.", "storeDocsErrorNetwork": "Netzwerkfehler beim Laden des README. {detail}", "@storeDocsErrorNetwork": { "placeholders": { "detail": { "type": "String" } } }, "storeDocsErrorParse": "README ist kein gültiges UTF-8.", "storeDocsErrorGeneric": "README konnte nicht geladen werden.", "storeSourceLabel": "Quelle", "storeSourceAll": "Alle Quellen", "storeSourceNative": "Nativ", "storeSourceMcp": "MCP", "storeSourceN8n": "n8n", "storeProvenanceNative": "nativ", "storeProvenanceMcp": "mcp · {provider}", "@storeProvenanceMcp": { "placeholders": { "provider": { "type": "String" } } }, "storeProvenanceN8n": "n8n · {provider}", "@storeProvenanceN8n": { "placeholders": { "provider": { "type": "String" } } }, "storeRecommendedTitle": "Öffentliche Quelle hinzufügen — ein Klick", "storeRecommendedBody": "Kuratierte MCP-Server über HTTPS erreichbar. Kein Subprozess, kein API-Key, kein Node. Föderierte Fähigkeiten erscheinen sofort im Store.", "storeRecommendedAddTooltip": "Hinzufügen und entdecken", "storeRecommendedAdding": "Wird hinzugefügt…", "storeRecommendedDeepWikiTagline": "GitHub-Repo-Doku-Suche (KI-gestützt)", "storeRecommendedSemgrepTagline": "Security-Scanning für Code-Schwachstellen", "storeProviderAddedToast": "{name} hinzugefügt — {n} {n, plural, =1{föderierte Fähigkeit} other{föderierte Fähigkeiten}}.", "@storeProviderAddedToast": { "placeholders": { "name": { "type": "String" }, "n": { "type": "int" } } }, "storeProviderAddedZeroToast": "{name} ist eingetragen, aber der Server hat noch keine Fähigkeiten geliefert. Öffne Einstellungen → MCP-Clients, um Discovery erneut zu versuchen oder den Server zu prüfen.", "@storeProviderAddedZeroToast": { "placeholders": { "name": { "type": "String" } } }, "storeProviderAddFailed": "{name} konnte nicht hinzugefügt werden: {error}", "@storeProviderAddFailed": { "placeholders": { "name": { "type": "String" }, "error": { "type": "String" } } }, "auditTitle": "Protokoll", "auditNoEvents": "Noch keine Ereignisse", "auditNoEventsHint": "Starte einen Flow, um den Audit-Stream zu füllen.\nEreignisse erscheinen innerhalb von Sekunden.", "auditFilterAll": "alle", "auditFilterFlow": "Flow", "auditFilterStep": "Step", "auditFilterModule": "Modul", "auditClearLogTooltip": "Protokoll löschen (nur local/dev Kanal)", "auditClearedToast": "{n} Ereignisse auf Kanal „{channel}\" gelöscht. Kette mit Marker neu geseedet.", "@auditClearedToast": { "placeholders": { "n": { "type": "int" }, "channel": { "type": "String" } } }, "auditClearFailed": "Löschen fehlgeschlagen: {detail}", "@auditClearFailed": { "placeholders": { "detail": { "type": "String" } } }, "auditExplain": "Erklären", "auditReask": "Neu fragen", "auditAsking": "Frage läuft…", "auditSystemAi": "SYSTEM-AI", "auditCachedPill": "gecacht", "auditOriginalLatency": "ursprünglich {ms} ms", "@auditOriginalLatency": { "placeholders": { "ms": { "type": "int" } } }, "auditLatency": "{ms} ms", "@auditLatency": { "placeholders": { "ms": { "type": "int" } } }, "auditRegenerateTooltip": "Neu generieren — Cache überspringen, Modell erneut fragen", "auditLiveStatus": "live · Abfrage alle 2s · {n} {n, plural, =1{Ereignis} other{Ereignisse}}", "@auditLiveStatus": { "placeholders": { "n": { "type": "int" } } }, "auditDisconnected": "getrennt · {error}", "@auditDisconnected": { "placeholders": { "error": { "type": "String" } } }, "auditHashChainVerified": "Hash-Kette verifiziert", "auditDetailHeader": "DETAIL", "auditAskingFull": "Frage an die konfigurierte System-AI läuft…", "auditFixLabel": "FIX", "auditCachedTooltipKnown": "Aus dem lokalen Cache geliefert. Ursprünglich erzeugt am {at}{hits}.", "@auditCachedTooltipKnown": { "placeholders": { "at": { "type": "String" }, "hits": { "type": "String" } } }, "auditCachedTooltipUnknown": "Aus dem lokalen Cache geliefert. Ursprünglicher Zeitpunkt unbekannt{hits}.", "@auditCachedTooltipUnknown": { "placeholders": { "hits": { "type": "String" } } }, "auditCachedTooltipHits": " · {n} Treffer", "@auditCachedTooltipHits": { "placeholders": { "n": { "type": "int" } } }, "auditConfigureSystemAi": "System-AI unter Einstellungen konfigurieren (Cmd+,)", "auditClearDialogTitle": "Audit-Log löschen?", "auditClearDialogBody": "Löscht jedes Audit-Event auf dem aktiven Kanal und seedet einen neuen chain.reset-Marker mit Prüfer und Begründung. Auf beta / production verweigert. Nicht umkehrbar.", "auditClearReviewerLabel": "Prüfer", "auditClearReasonLabel": "Begründung (im chain.reset-Marker festgehalten)", "auditClearReasonHelper": "Erforderlich — Auditoren werden das lesen.", "auditClearLogButton": "Log löschen", "modulesTitle": "Module", "modulesNoneTitle": "Noch keine Module", "modulesNoneHint": "`fai install ` ausführen oder ~/.fai/modules/ prüfen.", "modulesReloadTooltip": "Aktualisieren", "modulesRecentActivity": "LETZTE AKTIVITÄT", "modulesRecentActivityHint": "letzte {n} install/uninstall-Ereignisse aus dem Audit-Log", "@modulesRecentActivityHint": { "placeholders": { "n": { "type": "int" } } }, "modulesActivityInstalled": "installiert", "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": { "placeholders": { "name": { "type": "String" }, "version": { "type": "String" } } }, "modulesUninstalledToast": "{name} v{version} deinstalliert.", "@modulesUninstalledToast": { "placeholders": { "name": { "type": "String" }, "version": { "type": "String" } } }, "modulesUninstallFailed": "Deinstallation fehlgeschlagen: {error}", "@modulesUninstallFailed": { "placeholders": { "error": { "type": "String" } } }, "modulesUninstalling": "Wird deinstalliert…", "moduleSheetFailedToLoad": "Laden fehlgeschlagen: {error}", "@moduleSheetFailedToLoad": { "placeholders": { "error": { "type": "String" } } }, "moduleSheetCapabilities": "Fähigkeiten", "moduleSheetPermissions": "Deklarierte Berechtigungen", "moduleSheetNoPermissions": "(keine — reines Berechnungsmodul)", "flowsTitle": "Flows", "flowsReloadTooltip": "Aktualisieren", "flowsNoneTitle": "Keine gespeicherten Flows", "flowsNoneHint": "Flow speichern mit `fai admin flows save `, dann taucht er hier auf.", "flowsRunDialogTitle": "{name} ausführen", "@flowsRunDialogTitle": { "placeholders": { "name": { "type": "String" } } }, "flowsRunDialogBody": "Pro deklariertem Input ein Feld. Bytes-Inputs öffnen einen Datei-Picker; alle anderen sind Klartext. Der Starten-Button aktiviert sich, wenn alle Pflichtfelder gefüllt sind.", "flowsLoadingDefinition": "Inputs werden geladen…", "flowsDefinitionFailed": "Flow-Definition konnte nicht geladen werden", "flowsNoInputs": "Dieser Flow deklariert keine Inputs. Starten klicken, um loszulegen.", "flowsTypeBytesPick": "Datei wählen…", "flowsTypeBytesChange": "Datei ändern", "flowsTypeBytesNoFile": "Keine Datei ausgewählt", "flowsTypeBytesSize": "{n} Bytes", "@flowsTypeBytesSize": { "placeholders": { "n": { "type": "int" } } }, "flowsRunErrorTitle": "Flow-Lauf fehlgeschlagen", "flowsFileReadFailed": "„{path}\" konnte nicht gelesen werden: {error}", "@flowsFileReadFailed": { "placeholders": { "path": { "type": "String" }, "error": { "type": "String" } } }, "flowsMissingModulesLabel": "Braucht:", "flowsRunDisabledTooltip": "Erst die fehlenden Module installieren.", "flowsInstallAllButton": "Alle installieren ({n})", "@flowsInstallAllButton": { "placeholders": { "n": { "type": "int" } } }, "flowsInstallPillTooltip": "Zum Installieren klicken", "flowsInstallDepsTitle": "Abhängigkeiten installieren", "flowsInstallDepsBody": "Die fehlenden Module werden der Reihe nach installiert. Vorhandene Installationen bleiben unberührt.", "flowsInstallStatusPending": "Wartet", "flowsInstallStatusInstalling": "Wird installiert…", "flowsInstallStatusDone": "Installiert v{version}", "@flowsInstallStatusDone": { "placeholders": { "version": { "type": "String" } } }, "flowsInstallStatusFailed": "Fehlgeschlagen", "flowsInstallStatusFailedDetail": "{error}", "@flowsInstallStatusFailedDetail": { "placeholders": { "error": { "type": "String" } } }, "flowsInstallDepsAllDone": "Alle Abhängigkeiten installiert.", "flowsInstallDepsAnyFailed": "{ok} installiert, {failed} fehlgeschlagen.", "@flowsInstallDepsAnyFailed": { "placeholders": { "ok": { "type": "int" }, "failed": { "type": "int" } } }, "flowsInstallAuthWallButton": "Registry-Token einfügen", "flowsOpenInEditorTooltip": "YAML-Datei im Standard-Editor öffnen", "flowsOpenInEditorFailed": "Konnte Datei nicht öffnen: {error}", "@flowsOpenInEditorFailed": { "placeholders": { "error": { "type": "String" } } }, "registryCredentialsHeader": "REGISTRY-ZUGANGSDATEN", "registryCredentialsBlurb": "Token zum Herunterladen von .fai-Modulen aus einer Registry mit Anmeldepflicht (Forgejo, private GitHub-Repos). Gespeichert in ~/.fai/registry-token, Modus 0600. Die Umgebungsvariable FAI_REGISTRY_TOKEN hat weiterhin Vorrang, wenn gesetzt.", "registryTokenStatusConfigured": "Konfiguriert ({chars} Zeichen)", "@registryTokenStatusConfigured": { "placeholders": { "chars": { "type": "int" } } }, "registryTokenStatusNotSet": "Nicht gesetzt", "registryTokenFieldLabel": "Token", "registryTokenFieldHint": "Forgejo- oder GitHub-PAT einfügen", "registryTokenSaveButton": "Speichern", "registryTokenClearButton": "Entfernen", "registryTokenStorageHint": "Lokal gespeichert in ~/.fai/registry-token. Wird nie an einen Remote-Dienst übertragen.", "registryTokenSavedToast": "Registry-Token gespeichert.", "registryTokenClearedToast": "Registry-Token entfernt.", "registryTokenSaveFailedToast": "Speichern fehlgeschlagen: {error}", "@registryTokenSaveFailedToast": { "placeholders": { "error": { "type": "String" } } }, "maintenanceHeader": "HUB-WARTUNG", "maintenanceResetBlurb": "Operator-Zustand zurücksetzen und mit einem sauberen Hub neu starten. Stoppt jeden laufenden Daemon, sichert ~/.fai/ atomar in ein Backup, legt es dann neu an — Binary, Channel-Pointer, MCP-/n8n-/System-AI-Konfiguration und Registry-Token bleiben erhalten. Wiederherstellen durch Zurückverschieben des Backup-Ordners.", "maintenanceKeepModulesTitle": "Installierte Module behalten", "maintenanceKeepModulesSubtitle": "Standardverhalten löscht ~/.fai/modules/, damit eine frische Installation den Modul-Bezugspfad end-to-end verifizieren kann.", "maintenanceKeepDataTitle": "Protokoll + gespeicherte Flows behalten", "maintenanceKeepDataSubtitle": "Standardverhalten löscht ~/.fai/data/, damit die Audit-Kette mit einer neuen Genesis startet und die mitgelieferten Sample-Flows beim ersten Daemon-Start neu importiert werden.", "maintenanceResetButton": "Hub zurücksetzen", "maintenanceResetInProgress": "Zurücksetzen…", "maintenanceResetConfirmTitle": "Hub zurücksetzen?", "maintenanceResetConfirmBody": "Stoppt jeden Daemon, verschiebt ~/.fai/ in ein Backup mit Zeitstempel und startet sauber neu. Das Backup ist vollständig wiederherstellbar. Fortfahren?", "maintenanceResetConfirmButton": "Zurücksetzen", "welcomeChecklistAllSetTitle": "Du bist eingerichtet.", "welcomeChecklistAllSetBody": "Drei Stränge, an denen du als nächstes ziehen kannst:", "welcomeChecklistNextAuditTitle": "Audit-Log lesen", "welcomeChecklistNextAuditBody": "Jede Installation, jeder Flow-Lauf, jede Freigabe landet im hash-verketteten Log. Im Protokoll-Tab siehst du, was dein Hub gemacht hat.", "welcomeChecklistNextAuditButton": "Protokoll öffnen", "welcomeChecklistNextTodayTitle": "Daily-Today-Story einrichten", "welcomeChecklistNextTodayBody": "tools/today/propose.sh per Cron laufen lassen und die Editorial-Karte im Store füllt sich mit operator-kuratierten Stories.", "welcomeChecklistNextTodayButton": "Today-Doku öffnen", "welcomeChecklistNextModuleTitle": "Eigenes Modul bauen", "welcomeChecklistNextModuleBody": "Mit `fai new module ` ein Rust+WASM-Scaffold erzeugen. Das module-sdk übernimmt die WIT-Plumbing; du schreibst nur ein typisiertes invoke.", "welcomeChecklistNextModuleButton": "Doku lesen", "auditGroupToday": "HEUTE", "auditGroupYesterday": "GESTERN", "auditGroupThisWeek": "DIESE WOCHE", "auditGroupOlder": "ÄLTER", "auditEventViewFlowRun": "Flow-Lauf ansehen", "auditFlowRunDialogTitle": "Flow-Lauf · {flow}", "@auditFlowRunDialogTitle": { "placeholders": { "flow": { "type": "String" } } }, "auditFlowRunDialogSubtitle": "{n} {n, plural, =1{Ereignis} other{Ereignisse}} für Lauf {execution}", "@auditFlowRunDialogSubtitle": { "placeholders": { "n": { "type": "int" }, "execution": { "type": "String" } } }, "approvalsSelectAll": "Alle wählen", "approvalsClearSelection": "Auswahl aufheben", "approvalsBatchSelected": "{n} ausgewählt", "@approvalsBatchSelected": { "placeholders": { "n": { "type": "int" } } }, "approvalsBatchApprove": "Alle freigeben", "approvalsBatchReject": "Alle ablehnen", "approvalsBatchApproveDoneToast": "{n} Freigaben erteilt.", "@approvalsBatchApproveDoneToast": { "placeholders": { "n": { "type": "int" } } }, "approvalsBatchRejectDoneToast": "{n} Freigaben abgelehnt.", "@approvalsBatchRejectDoneToast": { "placeholders": { "n": { "type": "int" } } }, "approvalsBatchPartialFailure": "{ok} erledigt, {failed} fehlgeschlagen.", "@approvalsBatchPartialFailure": { "placeholders": { "ok": { "type": "int" }, "failed": { "type": "int" } } }, "flowsRunButton": "Starten", "flowsRunningTitle": "{name} läuft", "@flowsRunningTitle": { "placeholders": { "name": { "type": "String" } } }, "flowsResultTitle": "{name} — Ergebnis", "@flowsResultTitle": { "placeholders": { "name": { "type": "String" } } }, "flowsErrorTitle": "{name} — fehlgeschlagen", "@flowsErrorTitle": { "placeholders": { "name": { "type": "String" } } }, "flowsRunning": "Flow läuft…", "flowsNoOutputs": "Flow abgeschlossen ohne deklarierte Outputs.", "errGeneric": "Da ist etwas schiefgegangen.", "errInvalidArgument": "Ungültige Eingabe.", "errInvalidArgumentHint": "Werte im Formular prüfen und erneut versuchen.", "errNotFound": "Nicht gefunden.", "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. `~/.fai/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 `~/.fai/logs/` prüfen. Wenn das öfter passiert, bitte melden.", "errUnavailable": "Hub nicht erreichbar.", "errUnavailableHint": "Sicherstellen, dass `fai serve` (oder `fai daemon start`) läuft und der Daemon-Endpunkt zu Studios Einstellungen passt.", "errUnauthenticated": "Authentifizierung erforderlich.", "errUnauthenticatedHint": "`FAI_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.", "flowsOutputBytesUnknownMime": "Binärdaten", "flowsOutputSaveAs": "Speichern unter…", "flowsOutputSaveAsTitle": "Flow-Output speichern", "flowsOutputSavedAt": "Gespeichert: {path}", "@flowsOutputSavedAt": { "placeholders": { "path": { "type": "String" } } }, "flowsOutputSaveFailed": "Speichern fehlgeschlagen: {error}", "@flowsOutputSaveFailed": { "placeholders": { "error": { "type": "String" } } }, "flowsOutputOpen": "Öffnen", "flowsOutputOpenFailed": "Öffnen fehlgeschlagen: {error}", "@flowsOutputOpenFailed": { "placeholders": { "error": { "type": "String" } } }, "approvalsTitle": "Freigaben", "approvalsTabPending": "Offen", "approvalsTabHistory": "Verlauf", "approvalsInboxZero": "Posteingang leer", "approvalsInboxHint": "Alles erledigt. Neue `system.approval@^0`-Schritte landen automatisch hier.", "approvalsReloadTooltip": "Aktualisieren", "approvalsPillPending": "offen", "approvalsPillApproved": "freigegeben", "approvalsPillRejected": "abgelehnt", "approvalsPillExpired": "abgelaufen", "approvalsPayloadPreview": "PAYLOAD-VORSCHAU", "approvalsApproveButton": "Freigeben", "approvalsRejectButton": "Ablehnen", "approvalsRejectDialogTitle": "Freigabe ablehnen", "approvalsRejectReasonLabel": "Begründung (im Audit-Log festgehalten)", "approvalsApprovedToast": "freigegeben · {flow} › {step}", "@approvalsApprovedToast": { "placeholders": { "flow": { "type": "String" }, "step": { "type": "String" } } }, "approvalsRejectedToast": "abgelehnt · {flow} › {step}", "@approvalsRejectedToast": { "placeholders": { "flow": { "type": "String" }, "step": { "type": "String" } } }, "approvalsApproveFailed": "Freigabe fehlgeschlagen: {error}", "@approvalsApproveFailed": { "placeholders": { "error": { "type": "String" } } }, "approvalsRejectFailed": "Ablehnung fehlgeschlagen: {error}", "@approvalsRejectFailed": { "placeholders": { "error": { "type": "String" } } }, "approvalsHistoryEmpty": "Noch kein Verlauf", "approvalsHistoryEmptyHint": "Entschiedene Freigaben (freigegeben / abgelehnt / abgelaufen) erscheinen hier.\nDas Audit-Log enthält den vollständigen hash-verketteten Datensatz.", "approvalsDialogDecided": "entschieden", "approvalsDialogCreated": "erstellt", "approvalsDialogReason": "Begründung", "approvalsDialogPrompt": "PROMPT", "approvalsExpiresIn": "{minutes}m", "@approvalsExpiresIn": { "placeholders": { "minutes": { "type": "int" } } }, "approvalsExpiresInHours": "{hours}h", "@approvalsExpiresInHours": { "placeholders": { "hours": { "type": "int" } } }, "doctorTitle": "Diagnose", "doctorSummaryModules": "Module", "doctorSummaryApprovals": "Freigaben", "doctorSummaryAudit": "Protokoll", "doctorSummaryServices": "Dienste", "doctorSummaryCapabilities": "{n} Fähigkeiten", "@doctorSummaryCapabilities": { "placeholders": { "n": { "type": "int" } } }, "doctorSummaryPending": "offen", "doctorSummaryChain": "{verified}/{total} Kette", "@doctorSummaryChain": { "placeholders": { "verified": { "type": "int" }, "total": { "type": "int" } } }, "doctorSummaryDeclared": "deklariert", "doctorModulesPanelSummary": "{n} Module · {m} Fähigkeiten", "@doctorModulesPanelSummary": { "placeholders": { "n": { "type": "int" }, "m": { "type": "int" } } }, "doctorApprovalsNone": "Keine offenen Freigaben", "doctorApprovalsCount": "{n, plural, =1{1 Freigabe wartet auf Prüfung} other{{n} Freigaben warten auf Prüfung}}", "@doctorApprovalsCount": { "placeholders": { "n": { "type": "int" } } }, "doctorApprovalsAttentionPill": "wichtig", "doctorServicesEmpty": "Keine Host-Dienste deklariert", "doctorServicesEmptyHint": "in ~/.fai/config.yaml unter services: hinzufügen", "doctorPillLoaded": "geladen", "doctorPillEmpty": "leer", "doctorRecheckTooltip": "Erneut prüfen", "doctorEventLogSection": "Audit-Log", "doctorModulesApprovalsSection": "Module & Freigaben", "doctorHostServicesSection": "Host-Dienste", "doctorDaemonFilesSection": "Daemon-Dateien", "doctorDaemonControlSection": "Daemon-Steuerung", "doctorChainIntact": "Hash-Kette intakt", "doctorChainIntactDetail": "{n} Ereignisse · prev_event_sha256 lückenlos verifiziert", "@doctorChainIntactDetail": { "placeholders": { "n": { "type": "int" } } }, "doctorChainTampered": "Manipulation erkannt", "doctorChainTamperedDetail": "{verified} von {total} verifiziert vor Mismatch bei {id}", "@doctorChainTamperedDetail": { "placeholders": { "verified": { "type": "int" }, "total": { "type": "int" }, "id": { "type": "String" } } }, "doctorChainPillOk": "WORM-1", "doctorChainPillTamper": "MANIPULIERT", "doctorVerifyNow": "Jetzt prüfen", "doctorRestart": "Neustart", "doctorStart": "Starten", "doctorStop": "Stoppen", "doctorStatusAction": "Status", "doctorRunningOn": "Läuft auf {name}: {endpoint}", "@doctorRunningOn": { "placeholders": { "name": { "type": "String" }, "endpoint": { "type": "String" } } }, "doctorStoppedOn": "{name}-Daemon gestoppt", "@doctorStoppedOn": { "placeholders": { "name": { "type": "String" } } }, "doctorStatusUnknown": "Daemon-Status: …", "doctorPillRunning": "läuft", "doctorPillStopped": "gestoppt", "doctorDaemonControlHint": "Studio ruft das Platform-Binary auf — entspricht `fai daemon …`, sodass CLI und UI im Gleichschritt bleiben.", "doctorDaemonControlWorking": "Wird ausgeführt…", "doctorPathLog": "Log", "doctorPathConfig": "Konfig", "doctorPathDb": "Audit-DB", "doctorPathModules": "Module-Verzeichnis", "doctorPathFlows": "Flow-Verzeichnis", "doctorPathPid": "PID-Datei", "doctorPathsEmpty": "Daemon hat keine Datei-Pfade gemeldet. Hub aktualisieren via `fai daemon restart`.", "doctorOpenError": "Konnte nicht öffnen: {detail}", "@doctorOpenError": { "placeholders": { "detail": { "type": "String" } } }, "doctorUpdateAvailable": "Update verfügbar — {version}", "@doctorUpdateAvailable": { "placeholders": { "version": { "type": "String" } } }, "doctorUpdateBody": "Kanal {channel} bietet jetzt {version}. Per Button anwenden — Studio ruft `fai update apply --channel {channel}` auf.", "@doctorUpdateBody": { "placeholders": { "channel": { "type": "String" }, "version": { "type": "String" } } }, "doctorUpdateUnreachable": "Release-Host nicht erreichbar", "doctorUpdateUnreachableBody": "Release-Feed für {channel} konnte nicht erreicht werden.", "@doctorUpdateUnreachableBody": { "placeholders": { "channel": { "type": "String" } } }, "doctorReleaseNotes": "Notes: {url}", "@doctorReleaseNotes": { "placeholders": { "url": { "type": "String" } } }, "doctorPillNew": "neu", "doctorPillOffline": "offline", "doctorApplyUpdate": "Update anwenden", "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..` 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..` Fähigkeiten. Einmal konfigurieren, im Store sichtbar.", "n8nEmpty": "Keine n8n-Endpunkte konfiguriert. + klicken zum Hinzufügen.", "hubUnreachable": "Hub nicht erreichbar", "hubUnreachableHint": "Hub starten mit `fai serve`.", "languageEnglish": "English", "languageGerman": "Deutsch", "searchHint": "Springe überall hin — Module, Store, Flows, Seiten…", "searchIndexing": "Indiziere…", "searchNoMatches": "Keine Treffer.", "searchHintNavigate": "↑↓ navigieren", "searchHintOpen": "Enter öffnen", "searchHintClose": "Esc schließen", "searchGroupPages": "Seiten", "searchGroupModules": "Module", "searchGroupStore": "Store", "searchGroupFlows": "Flows", "searchSettingsLabel": "Einstellungen", "searchPageHint": "Seite · ⌘{n}", "@searchPageHint": { "placeholders": { "n": { "type": "int" } } }, "searchSettingsHint": "Hub-Endpunkt, Kanäle, System-AI · ⌘;", "searchInstalledModuleHint": "installiertes Modul · v{version}", "@searchInstalledModuleHint": { "placeholders": { "version": { "type": "String" } } }, "searchStoreUncategorized": "ohne Kategorie", "searchStoreHintWithTagline": "Store · {tagline}", "@searchStoreHintWithTagline": { "placeholders": { "tagline": { "type": "String" } } }, "searchStoreHintWithCategory": "Store · {category}", "@searchStoreHintWithCategory": { "placeholders": { "category": { "type": "String" } } }, "searchSavedFlowHint": "gespeicherter Flow", "systemAiTitle": "System-AI", "systemAiIntro": "Die hub-interne LLM, die die Plattform selbst für Fehlererklärungen und Operator-Hilfe nutzt. Standardmäßig aus; hier konfigurieren. Siehe docs/architecture/system-ai.md, was über die Leitung geht.", "systemAiProviderLabel": "Provider", "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": { "placeholders": { "name": { "type": "String" } } }, "systemAiTestConnection": "Verbindung testen", "systemAiTesting": "Teste…", "systemAiSave": "Speichern", "systemAiPrivacyHeader": "PRIVACY-MODUS", "systemAiPrivacyOffLabel": "Aus", "systemAiPrivacyOffDesc": "Feature deaktiviert. Keine Anfragen verlassen den Hub.", "systemAiPrivacyRedactedLabel": "Redigiert", "systemAiPrivacyRedactedDesc": "Nur event_type / error / Modul-Namen. KRITIS-freundlicher Standard.", "systemAiPrivacyFullLabel": "Voll", "systemAiPrivacyFullDesc": "Enthält das Audit-Detail-JSON (nur Hash — keine Roh-Payloads).", "systemAiConnectionOk": "Verbindung ok", "systemAiConnectionFailed": "Verbindung fehlgeschlagen", "systemAiReplyPrefix": "Antwort: {text}", "@systemAiReplyPrefix": { "placeholders": { "text": { "type": "String" } } }, "systemAiModelLabel": "Modell (erforderlich)", "systemAiModelHintFallback": "Modell-Identifier, den der Provider erwartet", "systemAiModelHelperBase": "Erforderlich: aus der Liste auswählen (Aktualisieren) oder eintippen.", "systemAiModelHelperOllama": "Erforderlich: aus der Liste auswählen (Aktualisieren) oder eintippen. Mit Pull von Ollama herunterladen.", "systemAiRefresh": "Aktualisieren", "systemAiPull": "Pull", "systemAiPulling": "Lade…", "systemAiCouldNotListModels": "Modelle konnten nicht aufgelistet werden: {error}", "@systemAiCouldNotListModels": { "placeholders": { "error": { "type": "String" } } }, "systemAiNoModelsOllama": "Noch keine Modelle auf dem Ollama-Server. Oben eintippen und Pull klicken.", "systemAiNoModelsGeneric": "Provider lieferte keine Modelle.", "systemAiSuitabilityRecommended": "empfohlen", "systemAiSuitabilityBalanced": "ausgewogen", "systemAiSuitabilitySmall": "klein — Qualität evtl. eingeschränkt", "systemAiSuitabilityLarge": "groß — langsamer", "systemAiSuitabilityHuge": "sehr groß — auf einem Laptop wahrscheinlich zu langsam", "systemAiSuitabilityUnknown": "Größe unbekannt", "systemAiHwDetected": "Erkannt: {summary}", "@systemAiHwDetected": { "placeholders": { "summary": { "type": "String" } } }, "systemAiHwReviewed": " · Kuratierung geprüft {date}", "@systemAiHwReviewed": { "placeholders": { "date": { "type": "String" } } }, "systemAiLegendRecommended": "empfohlen für diese Hardware{tier}", "@systemAiLegendRecommended": { "placeholders": { "tier": { "type": "String" } } }, "systemAiLegendBalanced": "ausgewogen (4-8B)", "systemAiLegendSmallLarge": "klein <3B / groß 9-15B / über Hardware", "systemAiLegendHuge": "sehr groß >15B", "systemAiLegendUnknown": "Größe unbekannt", "systemAiCacheRow": "Cache: {n} {n, plural, =1{gespeicherte Erklärung} other{gespeicherte Erklärungen}}. Identische Prompts treffen den Cache; Modell- oder Privacy-Modus-Wechsel leeren ihn automatisch.", "@systemAiCacheRow": { "placeholders": { "n": { "type": "int" } } }, "systemAiCacheClear": "Leeren", "systemAiCacheClearedToast": "{n} gespeicherte System-AI-Erklärungen gelöscht.", "@systemAiCacheClearedToast": { "placeholders": { "n": { "type": "int" } } }, "systemAiCacheClearFailed": "Cache-Löschen fehlgeschlagen: {error}", "@systemAiCacheClearFailed": { "placeholders": { "error": { "type": "String" } } }, "systemAiPullEmptyError": "Erst eine Modell-ID eintippen (z.B. gemma3:4b).", "systemAiPullFailedError": "Pull fehlgeschlagen: {error}", "@systemAiPullFailedError": { "placeholders": { "error": { "type": "String" } } } }