- Add curated catalogue of 9 official Anthropic MCP servers as click-to-prefill chips in the Add-MCP-server dialog. Operator still confirms via "Add + discover"; nothing is auto-spawned, preserving the regulated-environment trust model. - Localize Approvals page: pending/history empty states, status pills, payload preview, approve/reject toasts, reject dialog, history detail dialog, expires-in pill. - Localize Audit page: filter chips, clear-log dialog and toasts, no-events / hub-unreachable empty states, live-status bar with pluralized event count, hash-chain-verified badge, System AI panel (cached pill, latency, regenerate tooltip, asking state), event-detail dialog actions. - Localize Settings dialog: hub-endpoint section, channel blurb + popup-menu items, System AI panel headers and off-blurb, MCP/N8N panel headers + pluralized counts + refresh/add/remove tooltips, Add-MCP and Add-n8n dialogs (intro, suggestions label, all field labels and hints, save buttons, toasts). Field labels that map directly to JSON keys (event_id, flow, step, module, provider, endpoint, model) stay English by design — they're technical identifiers, not UI copy. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
817 lines
19 KiB
Dart
817 lines
19 KiB
Dart
// ignore: unused_import
|
||
import 'package:intl/intl.dart' as intl;
|
||
import 'app_localizations.dart';
|
||
|
||
// ignore_for_file: type=lint
|
||
|
||
/// The translations for German (`de`).
|
||
class AppLocalizationsDe extends AppLocalizations {
|
||
AppLocalizationsDe([String locale = 'de']) : super(locale);
|
||
|
||
@override
|
||
String get appTitle => 'F∆I Studio';
|
||
|
||
@override
|
||
String get navDoctor => 'Diagnose';
|
||
|
||
@override
|
||
String get navModules => 'Module';
|
||
|
||
@override
|
||
String get navStore => 'Store';
|
||
|
||
@override
|
||
String get navFlows => 'Flows';
|
||
|
||
@override
|
||
String get navAudit => 'Protokoll';
|
||
|
||
@override
|
||
String get navApprovals => 'Freigaben';
|
||
|
||
@override
|
||
String get connectionConnected => 'verbunden';
|
||
|
||
@override
|
||
String get connectionUnreachable => 'nicht erreichbar';
|
||
|
||
@override
|
||
String get connectionConnecting => 'verbinde…';
|
||
|
||
@override
|
||
String get connectionStartHub => 'Hub starten';
|
||
|
||
@override
|
||
String get buttonCancel => 'Abbrechen';
|
||
|
||
@override
|
||
String get buttonSave => 'Speichern';
|
||
|
||
@override
|
||
String get buttonClose => 'Schließen';
|
||
|
||
@override
|
||
String get buttonRetry => 'Erneut versuchen';
|
||
|
||
@override
|
||
String get buttonRefresh => 'Aktualisieren';
|
||
|
||
@override
|
||
String get buttonInstall => 'Installieren';
|
||
|
||
@override
|
||
String get buttonUninstall => 'Deinstallieren';
|
||
|
||
@override
|
||
String get buttonDetails => 'Details';
|
||
|
||
@override
|
||
String get buttonAdd => 'Hinzufügen';
|
||
|
||
@override
|
||
String get buttonRemove => 'Entfernen';
|
||
|
||
@override
|
||
String get buttonOpen => 'Öffnen';
|
||
|
||
@override
|
||
String get buttonExplain => 'Erklären';
|
||
|
||
@override
|
||
String get buttonReadDocs => 'Doku öffnen';
|
||
|
||
@override
|
||
String get settingsTitle => 'Hub-Endpunkt';
|
||
|
||
@override
|
||
String get settingsHost => 'Host';
|
||
|
||
@override
|
||
String get settingsPort => 'Port';
|
||
|
||
@override
|
||
String get settingsTls => 'TLS';
|
||
|
||
@override
|
||
String get settingsSaveAndConnect => 'Speichern & verbinden';
|
||
|
||
@override
|
||
String get settingsLanguage => 'Sprache';
|
||
|
||
@override
|
||
String get settingsLanguageHint =>
|
||
'Sprache der App. Wirkt auf alle Seiten; mehrsprachige Store-Einträge folgen ebenfalls.';
|
||
|
||
@override
|
||
String get settingsHubEndpointHint =>
|
||
'Wohin soll Studio sich verbinden? Standard ist der lokale Hub auf 127.0.0.1:50051.';
|
||
|
||
@override
|
||
String get settingsTlsSubtitle => 'https/grpc-secure';
|
||
|
||
@override
|
||
String get settingsPortError => 'Port muss 1–65535 sein';
|
||
|
||
@override
|
||
String get channelsBlurb =>
|
||
'Hub-Kanal wechseln (schreibt ~/.fai/current-channel und startet den Daemon neu). Verbinden ändert nur die Wire von Studio.';
|
||
|
||
@override
|
||
String get channelsActionsTooltip => 'Kanal-Aktionen';
|
||
|
||
@override
|
||
String get systemAiHeader => 'SYSTEM-AI';
|
||
|
||
@override
|
||
String get systemAiEnabled => 'aktiv';
|
||
|
||
@override
|
||
String get systemAiOff => 'aus';
|
||
|
||
@override
|
||
String get systemAiEdit => 'Bearbeiten…';
|
||
|
||
@override
|
||
String get systemAiConfigure => 'Konfigurieren…';
|
||
|
||
@override
|
||
String get 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.';
|
||
|
||
@override
|
||
String mcpServersCount(int n) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
n,
|
||
locale: localeName,
|
||
other: 'Server',
|
||
one: 'Server',
|
||
);
|
||
return '$n $_temp0';
|
||
}
|
||
|
||
@override
|
||
String get mcpRediscoverTooltip => 'Discovery neu ausführen';
|
||
|
||
@override
|
||
String get mcpAddTooltip => 'MCP-Server hinzufügen';
|
||
|
||
@override
|
||
String get mcpRemoveTooltip => 'Server entfernen';
|
||
|
||
@override
|
||
String mcpToolsCount(int n) {
|
||
return '$n Tools';
|
||
}
|
||
|
||
@override
|
||
String n8nEndpointsCount(int n) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
n,
|
||
locale: localeName,
|
||
other: 'Endpunkte',
|
||
one: 'Endpunkt',
|
||
);
|
||
return '$n $_temp0';
|
||
}
|
||
|
||
@override
|
||
String n8nWorkflowsCount(int n) {
|
||
return '$n Workflows';
|
||
}
|
||
|
||
@override
|
||
String get n8nRediscoverTooltip => 'Discovery neu ausführen';
|
||
|
||
@override
|
||
String get n8nAddTooltip => 'n8n-Endpunkt hinzufügen';
|
||
|
||
@override
|
||
String get n8nRemoveTooltip => 'Endpunkt entfernen';
|
||
|
||
@override
|
||
String get addMcpTitle => 'MCP-Server hinzufügen';
|
||
|
||
@override
|
||
String get addMcpIntro =>
|
||
'Tools, die der Server via `tools/list` anbietet, erscheinen im Store als `mcp.<name>.<tool>`-Capabilities.';
|
||
|
||
@override
|
||
String get addMcpSuggestionsLabel => 'Vorschläge — zum Vorausfüllen klicken';
|
||
|
||
@override
|
||
String get addMcpNameLabel => 'Name (keine Punkte)';
|
||
|
||
@override
|
||
String get addMcpNameHint => 'filesystem';
|
||
|
||
@override
|
||
String get addMcpEndpointLabel => 'Endpunkt';
|
||
|
||
@override
|
||
String get addMcpEndpointHint => 'http://127.0.0.1:3001/mcp';
|
||
|
||
@override
|
||
String get addMcpApiKeyLabel => 'API-Key-Umgebungsvariable (optional)';
|
||
|
||
@override
|
||
String get addMcpApiKeyHint => 'MCP_FILESYSTEM_TOKEN';
|
||
|
||
@override
|
||
String get addMcpNotesLabel => 'Notizen (optional)';
|
||
|
||
@override
|
||
String get addMcpAddButton => 'Hinzufügen + Discovery';
|
||
|
||
@override
|
||
String get addN8nTitle => 'n8n-Endpunkt hinzufügen';
|
||
|
||
@override
|
||
String get addN8nIntro =>
|
||
'Aktive Workflows erscheinen im Store als `n8n.<name>.<workflow_slug>`-Capabilities.';
|
||
|
||
@override
|
||
String get addN8nNameLabel => 'Name (keine Punkte)';
|
||
|
||
@override
|
||
String get addN8nNameHint => 'ops';
|
||
|
||
@override
|
||
String get addN8nBaseUrlLabel => 'Basis-URL (ohne /api/v1)';
|
||
|
||
@override
|
||
String get addN8nBaseUrlHint => 'https://n8n.example.com';
|
||
|
||
@override
|
||
String get addN8nApiKeyLabel => 'API-Key-Umgebungsvariable (optional)';
|
||
|
||
@override
|
||
String get addN8nApiKeyHint => 'N8N_OPS_KEY';
|
||
|
||
@override
|
||
String get addN8nNotesLabel => 'Notizen (optional)';
|
||
|
||
@override
|
||
String get addN8nAddButton => 'Hinzufügen + Discovery';
|
||
|
||
@override
|
||
String addedMcpToast(String name) {
|
||
return 'MCP-Server „$name\" hinzugefügt.';
|
||
}
|
||
|
||
@override
|
||
String addedN8nToast(String name) {
|
||
return 'n8n-Endpunkt „$name\" hinzugefügt.';
|
||
}
|
||
|
||
@override
|
||
String addFailedToast(String error) {
|
||
return 'Hinzufügen fehlgeschlagen: $error';
|
||
}
|
||
|
||
@override
|
||
String removeFailedToast(String error) {
|
||
return 'Entfernen fehlgeschlagen: $error';
|
||
}
|
||
|
||
@override
|
||
String refreshFailedToast(String error) {
|
||
return 'Aktualisieren fehlgeschlagen: $error';
|
||
}
|
||
|
||
@override
|
||
String get channelsHeader => 'KANÄLE';
|
||
|
||
@override
|
||
String get channelsActive => 'aktiv';
|
||
|
||
@override
|
||
String get channelsRunning => 'läuft';
|
||
|
||
@override
|
||
String get channelsStopped => 'gestoppt';
|
||
|
||
@override
|
||
String get channelsConnect => 'Studio mit diesem Kanal verbinden';
|
||
|
||
@override
|
||
String get channelsSwitch => 'Diesen Kanal aktivieren';
|
||
|
||
@override
|
||
String get channelsEnableAutostart => 'Autostart bei Anmeldung aktivieren';
|
||
|
||
@override
|
||
String get channelsDisableAutostart => 'Autostart deaktivieren';
|
||
|
||
@override
|
||
String get storeSearchHint =>
|
||
'Module suchen — Name, Tagline, Tag, Capability…';
|
||
|
||
@override
|
||
String get storeFeatured => 'EMPFOHLEN';
|
||
|
||
@override
|
||
String get storeFeaturedHint => 'kuratierte Auswahl · klicken für Details';
|
||
|
||
@override
|
||
String get storeNoMatches => 'Keine Treffer';
|
||
|
||
@override
|
||
String get storeNoMatchesHint =>
|
||
'Filter anpassen oder Suche leeren, um alle Einträge zu sehen.';
|
||
|
||
@override
|
||
String get storeClearFilters => 'Filter zurücksetzen';
|
||
|
||
@override
|
||
String get storeStatusAll => 'Alle';
|
||
|
||
@override
|
||
String get storeStatusPublished => 'Veröffentlicht';
|
||
|
||
@override
|
||
String get storeStatusAlpha => 'Alpha';
|
||
|
||
@override
|
||
String get storeStatusPlanned => 'Geplant';
|
||
|
||
@override
|
||
String get storeInstalledOnly => 'Installiert';
|
||
|
||
@override
|
||
String storeNResults(int n) {
|
||
return '$n Treffer';
|
||
}
|
||
|
||
@override
|
||
String get storeFederationNudgeTitle => 'Mehr Capabilities?';
|
||
|
||
@override
|
||
String get storeFederationNudgeBody =>
|
||
'MCP-Server oder n8n-Endpunkt unter Einstellungen → MCP-Clients / N8N-Endpunkte konfigurieren. Entdeckte Tools und Workflows tauchen hier als `mcp.<server>.<tool>`- und `n8n.<endpoint>.<workflow>`-Capabilities auf — jeder Anthropic-/Community-MCP-Server bringt mehrere auf einmal.';
|
||
|
||
@override
|
||
String get storeFederationNudgeButton => 'Einstellungen öffnen';
|
||
|
||
@override
|
||
String get auditTitle => 'Protokoll';
|
||
|
||
@override
|
||
String get auditNoEvents => 'Noch keine Ereignisse';
|
||
|
||
@override
|
||
String get auditNoEventsHint =>
|
||
'Starte einen Flow, um den Audit-Stream zu füllen.\nEreignisse erscheinen innerhalb von Sekunden.';
|
||
|
||
@override
|
||
String get auditFilterAll => 'alle';
|
||
|
||
@override
|
||
String get auditFilterFlow => 'Flow';
|
||
|
||
@override
|
||
String get auditFilterStep => 'Step';
|
||
|
||
@override
|
||
String get auditFilterModule => 'Modul';
|
||
|
||
@override
|
||
String get auditClearLogTooltip => 'Protokoll löschen (nur local/dev Kanal)';
|
||
|
||
@override
|
||
String auditClearedToast(int n, String channel) {
|
||
return '$n Ereignisse auf Kanal „$channel\" gelöscht. Chain mit Marker neu geseedet.';
|
||
}
|
||
|
||
@override
|
||
String auditClearFailed(String detail) {
|
||
return 'Löschen fehlgeschlagen: $detail';
|
||
}
|
||
|
||
@override
|
||
String get auditExplain => 'Erklären';
|
||
|
||
@override
|
||
String get auditReask => 'Neu fragen';
|
||
|
||
@override
|
||
String get auditAsking => 'Frage läuft…';
|
||
|
||
@override
|
||
String get auditSystemAi => 'SYSTEM-AI';
|
||
|
||
@override
|
||
String get auditCachedPill => 'gecacht';
|
||
|
||
@override
|
||
String auditOriginalLatency(int ms) {
|
||
return 'ursprünglich $ms ms';
|
||
}
|
||
|
||
@override
|
||
String auditLatency(int ms) {
|
||
return '$ms ms';
|
||
}
|
||
|
||
@override
|
||
String get auditRegenerateTooltip =>
|
||
'Neu generieren — Cache überspringen, Modell erneut fragen';
|
||
|
||
@override
|
||
String auditLiveStatus(int n) {
|
||
String _temp0 = intl.Intl.pluralLogic(
|
||
n,
|
||
locale: localeName,
|
||
other: 'Ereignisse',
|
||
one: 'Ereignis',
|
||
);
|
||
return 'live · Abfrage alle 2s · $n $_temp0';
|
||
}
|
||
|
||
@override
|
||
String auditDisconnected(String error) {
|
||
return 'getrennt · $error';
|
||
}
|
||
|
||
@override
|
||
String get auditHashChainVerified => 'Hash-Chain verifiziert';
|
||
|
||
@override
|
||
String get auditDetailHeader => 'DETAIL';
|
||
|
||
@override
|
||
String get auditAskingFull => 'Frage an die konfigurierte System-AI läuft…';
|
||
|
||
@override
|
||
String get auditFixLabel => 'FIX';
|
||
|
||
@override
|
||
String auditCachedTooltipKnown(String at, String hits) {
|
||
return 'Aus dem lokalen Cache geliefert. Ursprünglich erzeugt am $at$hits.';
|
||
}
|
||
|
||
@override
|
||
String auditCachedTooltipUnknown(String hits) {
|
||
return 'Aus dem lokalen Cache geliefert. Ursprünglicher Zeitpunkt unbekannt$hits.';
|
||
}
|
||
|
||
@override
|
||
String auditCachedTooltipHits(int n) {
|
||
return ' · $n Treffer';
|
||
}
|
||
|
||
@override
|
||
String get auditConfigureSystemAi =>
|
||
'System-AI unter Einstellungen konfigurieren (Cmd+,)';
|
||
|
||
@override
|
||
String get auditClearDialogTitle => 'Audit-Log löschen?';
|
||
|
||
@override
|
||
String get 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.';
|
||
|
||
@override
|
||
String get auditClearReviewerLabel => 'Prüfer';
|
||
|
||
@override
|
||
String get auditClearReasonLabel =>
|
||
'Begründung (im chain.reset-Marker festgehalten)';
|
||
|
||
@override
|
||
String get auditClearReasonHelper =>
|
||
'Erforderlich — Auditoren werden das lesen.';
|
||
|
||
@override
|
||
String get auditClearLogButton => 'Log löschen';
|
||
|
||
@override
|
||
String get modulesTitle => 'Module';
|
||
|
||
@override
|
||
String get modulesNoneTitle => 'Noch keine Module';
|
||
|
||
@override
|
||
String get modulesNoneHint =>
|
||
'`fai install <capability-name>` ausführen oder ~/.fai/modules/ prüfen.';
|
||
|
||
@override
|
||
String get modulesReloadTooltip => 'Aktualisieren';
|
||
|
||
@override
|
||
String get modulesRecentActivity => 'LETZTE AKTIVITÄT';
|
||
|
||
@override
|
||
String modulesRecentActivityHint(int n) {
|
||
return 'letzte $n install/uninstall-Ereignisse aus dem Audit-Log';
|
||
}
|
||
|
||
@override
|
||
String get modulesActivityInstalled => 'installiert';
|
||
|
||
@override
|
||
String get modulesActivityUninstalled => 'deinstalliert';
|
||
|
||
@override
|
||
String get modulesCapabilitiesLabel => 'Capabilities';
|
||
|
||
@override
|
||
String get modulesUninstallTitle => 'Modul deinstallieren?';
|
||
|
||
@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.';
|
||
}
|
||
|
||
@override
|
||
String modulesUninstalledToast(String name, String version) {
|
||
return '$name v$version deinstalliert.';
|
||
}
|
||
|
||
@override
|
||
String modulesUninstallFailed(String error) {
|
||
return 'Deinstallation fehlgeschlagen: $error';
|
||
}
|
||
|
||
@override
|
||
String get modulesUninstalling => 'Wird deinstalliert…';
|
||
|
||
@override
|
||
String get approvalsTitle => 'Freigaben';
|
||
|
||
@override
|
||
String get approvalsTabPending => 'Offen';
|
||
|
||
@override
|
||
String get approvalsTabHistory => 'Verlauf';
|
||
|
||
@override
|
||
String get approvalsInboxZero => 'Posteingang leer';
|
||
|
||
@override
|
||
String get approvalsInboxHint =>
|
||
'Alles erledigt. Neue `system.approval@^0`-Schritte landen automatisch hier.';
|
||
|
||
@override
|
||
String get approvalsReloadTooltip => 'Aktualisieren';
|
||
|
||
@override
|
||
String get approvalsPillPending => 'offen';
|
||
|
||
@override
|
||
String get approvalsPillApproved => 'freigegeben';
|
||
|
||
@override
|
||
String get approvalsPillRejected => 'abgelehnt';
|
||
|
||
@override
|
||
String get approvalsPillExpired => 'abgelaufen';
|
||
|
||
@override
|
||
String get approvalsPayloadPreview => 'PAYLOAD-VORSCHAU';
|
||
|
||
@override
|
||
String get approvalsApproveButton => 'Freigeben';
|
||
|
||
@override
|
||
String get approvalsRejectButton => 'Ablehnen';
|
||
|
||
@override
|
||
String get approvalsRejectDialogTitle => 'Freigabe ablehnen';
|
||
|
||
@override
|
||
String get approvalsRejectReasonLabel =>
|
||
'Begründung (im Audit-Log festgehalten)';
|
||
|
||
@override
|
||
String approvalsApprovedToast(String flow, String step) {
|
||
return 'freigegeben · $flow › $step';
|
||
}
|
||
|
||
@override
|
||
String approvalsRejectedToast(String flow, String step) {
|
||
return 'abgelehnt · $flow › $step';
|
||
}
|
||
|
||
@override
|
||
String approvalsApproveFailed(String error) {
|
||
return 'Freigabe fehlgeschlagen: $error';
|
||
}
|
||
|
||
@override
|
||
String approvalsRejectFailed(String error) {
|
||
return 'Ablehnung fehlgeschlagen: $error';
|
||
}
|
||
|
||
@override
|
||
String get approvalsHistoryEmpty => 'Noch kein Verlauf';
|
||
|
||
@override
|
||
String get approvalsHistoryEmptyHint =>
|
||
'Entschiedene Freigaben (freigegeben / abgelehnt / abgelaufen) erscheinen hier.\nDas Audit-Log enthält den vollständigen hash-chained Datensatz.';
|
||
|
||
@override
|
||
String get approvalsDialogDecided => 'entschieden';
|
||
|
||
@override
|
||
String get approvalsDialogCreated => 'erstellt';
|
||
|
||
@override
|
||
String get approvalsDialogReason => 'Begründung';
|
||
|
||
@override
|
||
String get approvalsDialogPrompt => 'PROMPT';
|
||
|
||
@override
|
||
String approvalsExpiresIn(int minutes) {
|
||
return '${minutes}m';
|
||
}
|
||
|
||
@override
|
||
String approvalsExpiresInHours(int hours) {
|
||
return '${hours}h';
|
||
}
|
||
|
||
@override
|
||
String get doctorTitle => 'Diagnose';
|
||
|
||
@override
|
||
String get doctorRecheckTooltip => 'Erneut prüfen';
|
||
|
||
@override
|
||
String get doctorEventLogSection => 'Audit-Log';
|
||
|
||
@override
|
||
String get doctorModulesApprovalsSection => 'Module & Freigaben';
|
||
|
||
@override
|
||
String get doctorHostServicesSection => 'Host-Dienste';
|
||
|
||
@override
|
||
String get doctorDaemonFilesSection => 'Daemon-Dateien';
|
||
|
||
@override
|
||
String get doctorDaemonControlSection => 'Daemon-Steuerung';
|
||
|
||
@override
|
||
String get doctorChainIntact => 'Hash-Chain intakt';
|
||
|
||
@override
|
||
String doctorChainIntactDetail(int n) {
|
||
return '$n Ereignisse · prev_event_sha256 lückenlos verifiziert';
|
||
}
|
||
|
||
@override
|
||
String get doctorChainTampered => 'Manipulation erkannt';
|
||
|
||
@override
|
||
String doctorChainTamperedDetail(int verified, int total, String id) {
|
||
return '$verified von $total verifiziert vor Mismatch bei $id';
|
||
}
|
||
|
||
@override
|
||
String get doctorChainPillOk => 'WORM-1';
|
||
|
||
@override
|
||
String get doctorChainPillTamper => 'MANIPULIERT';
|
||
|
||
@override
|
||
String get doctorVerifyNow => 'Jetzt prüfen';
|
||
|
||
@override
|
||
String get doctorRestart => 'Neustart';
|
||
|
||
@override
|
||
String get doctorStart => 'Starten';
|
||
|
||
@override
|
||
String get doctorStop => 'Stoppen';
|
||
|
||
@override
|
||
String get doctorStatusAction => 'Status';
|
||
|
||
@override
|
||
String doctorRunningOn(String name, String endpoint) {
|
||
return 'Läuft auf $name: $endpoint';
|
||
}
|
||
|
||
@override
|
||
String doctorStoppedOn(String name) {
|
||
return '$name-Daemon gestoppt';
|
||
}
|
||
|
||
@override
|
||
String get doctorStatusUnknown => 'Daemon-Status: …';
|
||
|
||
@override
|
||
String get doctorPillRunning => 'läuft';
|
||
|
||
@override
|
||
String get doctorPillStopped => 'gestoppt';
|
||
|
||
@override
|
||
String get doctorDaemonControlHint =>
|
||
'Studio ruft das Platform-Binary auf — entspricht `fai daemon …`, sodass CLI und UI im Gleichschritt bleiben.';
|
||
|
||
@override
|
||
String get doctorDaemonControlWorking => 'Wird ausgeführt…';
|
||
|
||
@override
|
||
String get doctorPathLog => 'Log';
|
||
|
||
@override
|
||
String get doctorPathConfig => 'Konfig';
|
||
|
||
@override
|
||
String get doctorPathDb => 'Audit-DB';
|
||
|
||
@override
|
||
String get doctorPathModules => 'Module-Verzeichnis';
|
||
|
||
@override
|
||
String get doctorPathFlows => 'Flow-Verzeichnis';
|
||
|
||
@override
|
||
String get doctorPathPid => 'PID-Datei';
|
||
|
||
@override
|
||
String get doctorPathsEmpty =>
|
||
'Daemon hat keine Datei-Pfade gemeldet. Hub aktualisieren via `fai daemon restart`.';
|
||
|
||
@override
|
||
String doctorOpenError(String detail) {
|
||
return 'Konnte nicht öffnen: $detail';
|
||
}
|
||
|
||
@override
|
||
String doctorUpdateAvailable(String version) {
|
||
return 'Update verfügbar — $version';
|
||
}
|
||
|
||
@override
|
||
String doctorUpdateBody(String channel, String version) {
|
||
return 'Kanal $channel bietet jetzt $version. Per Button anwenden — Studio ruft `fai update apply --channel $channel` auf.';
|
||
}
|
||
|
||
@override
|
||
String get doctorUpdateUnreachable => 'Release-Host nicht erreichbar';
|
||
|
||
@override
|
||
String doctorUpdateUnreachableBody(String channel) {
|
||
return 'Release-Feed für $channel konnte nicht erreicht werden.';
|
||
}
|
||
|
||
@override
|
||
String doctorReleaseNotes(String url) {
|
||
return 'Notes: $url';
|
||
}
|
||
|
||
@override
|
||
String get doctorPillNew => 'neu';
|
||
|
||
@override
|
||
String get doctorPillOffline => 'offline';
|
||
|
||
@override
|
||
String get doctorApplyUpdate => 'Update anwenden';
|
||
|
||
@override
|
||
String get doctorApplying => 'Wird angewendet…';
|
||
|
||
@override
|
||
String get doctorApplyDone =>
|
||
'Update angewendet. Studio neu starten, um die neue Daemon-Version zu sehen.';
|
||
|
||
@override
|
||
String get mcpHeader => 'MCP-CLIENTS';
|
||
|
||
@override
|
||
String get mcpHint =>
|
||
'Externe MCP-Server bringen ihre Tools als `mcp.<server>.<tool>` Capabilities ein. Einmal konfigurieren, im Store sichtbar.';
|
||
|
||
@override
|
||
String get mcpEmpty =>
|
||
'Keine MCP-Server konfiguriert. + klicken zum Hinzufügen.';
|
||
|
||
@override
|
||
String get n8nHeader => 'N8N-ENDPUNKTE';
|
||
|
||
@override
|
||
String get n8nHint =>
|
||
'Aktive n8n-Workflows erscheinen als `n8n.<endpoint>.<slug>` Capabilities. Einmal konfigurieren, im Store sichtbar.';
|
||
|
||
@override
|
||
String get n8nEmpty =>
|
||
'Keine n8n-Endpunkte konfiguriert. + klicken zum Hinzufügen.';
|
||
|
||
@override
|
||
String get hubUnreachable => 'Hub nicht erreichbar';
|
||
|
||
@override
|
||
String get hubUnreachableHint => 'Hub starten mit `fai serve`.';
|
||
|
||
@override
|
||
String get languageEnglish => 'English';
|
||
|
||
@override
|
||
String get languageGerman => 'Deutsch';
|
||
}
|