export default { // Login login: { title: 'Hermes Web UI', description: 'Geben Sie Ihren Zugangs-Token ein, um fortzufahren. Finden Sie ihn in den Server-Startprotokollen.', placeholder: 'Zugangs-Token', submit: 'Anmelden', tokenRequired: 'Bitte geben Sie Ihren Zugangs-Token ein', invalidToken: 'Ungultiger Token', connectionFailed: 'Verbindung zum Server nicht moglich', passwordLogin: 'Passwort', tokenLogin: 'Token', usernamePlaceholder: 'Benutzername', passwordPlaceholder: 'Passwort', credentialsRequired: 'Bitte Benutzername und Passwort eingeben', invalidCredentials: 'Ungultiger Benutzername oder Passwort', tooManyAttempts: 'Zu viele fehlgeschlagene Versuche, bitte versuchen Sie es spater erneut', passwordMismatch: 'Passworter stimmen nicht uberein', passwordTooShort: 'Passwort muss mindestens 6 Zeichen lang sein', setupSuccess: 'Passwort-Login erfolgreich konfiguriert', passwordChanged: 'Passwort erfolgreich geandert', passwordRemoved: 'Passwort-Login entfernt', setupPassword: 'Passwort-Login einrichten', changePassword: 'Passwort andern', changeUsername: 'Benutzername andern', removePasswordLogin: 'Entfernen', username: 'Benutzername', currentPassword: 'Aktuelles Passwort', newPassword: 'Neues Passwort', confirmPassword: 'Passwort bestatigen', newUsername: 'Neuer Benutzername', usernameChanged: 'Benutzername erfolgreich geandert', usernameTooShort: 'Benutzername muss mindestens 2 Zeichen lang sein', setupDescription: 'Richten Sie Benutzername und Passwort fur bequemes Login ein. Der Zugangs-Token bleibt als Backup verfugbar.', removeConfirm: 'Mochten Sie das Passwort-Login wirklich entfernen? Sie mussen dann den Zugangs-Token verwenden.', passwordLoginNotConfigured: 'Passwort-Login ist nicht konfiguriert', passwordLoginConfigured: 'Passwort-Login aktiviert ({username})', }, // Common common: { loading: 'Laden...', cancel: 'Abbrechen', retry: 'Erneutern', delete: 'Loschen', edit: 'Bearbeiten', save: 'Speichern', saved: 'Gespeichert', update: 'Aktualisieren', create: 'Erstellen', saveFailed: 'Speichern fehlgeschlagen', deleteFailed: 'Loschen fehlgeschlagen', ok: 'OK', copied: 'Kopiert', copy: 'Kopieren', noData: 'Keine Daten', fetch: 'Abrufen', add: 'Hinzufugen', enable: 'Aktivieren', disable: 'Deaktivieren', configured: 'Konfiguriert', notConfigured: 'Nicht konfiguriert', confirm: 'Bestatigen', expand: 'Aufklappen', collapse: 'Zuklappen', stop: 'Stoppen', start: 'Starten', expired: 'Abgelaufen', }, // Sidebar sidebar: { chat: 'Chat', search: 'Suche', apiRelay: 'API-Relay', history: 'Verlauf', jobs: 'Geplante Aufgaben', models: 'Modelle', profiles: 'Profile', plugins: 'Plugins', skills: 'Fahigkeiten', memory: 'Gedachtnis', logs: 'Protokolle', usage: 'Nutzung', performance: 'Leistung', skillsUsage: 'Skill-Nutzung', channels: 'Kanale', terminal: 'Konsole', files: 'Dateien', groupChat: 'Gruppenchat', groupConversation: 'Konversation', groupConversationShort: 'Konv', groupAgent: 'Agent', groupAgentShort: 'Agent', groupSystem: 'System', groupSystemShort: 'Sys', groupMonitoring: 'Überwachung', groupMonitoringShort: 'Überw.', settings: 'Einstellungen', connected: 'Verbunden', disconnected: 'Getrennt', updateTip: 'Fuhren Sie "hermes-web-ui update" im Terminal aus, um zu aktualisieren', updateVersion: 'Aktualisieren auf v{version}', reloadClientVersion: 'Für v{version} neu laden', updating: 'Aktualisierung...', updateSuccess: 'Aktualisierung erfolgreich. Bitte aktualisieren Sie die Seite in Kurze. Wenn der Dienst langere Zeit nicht startet, starten Sie ihn manuell.', updateFailed: 'Aktualisierung fehlgeschlagen', logout: 'Abmelden', nodeVersionWarning: 'Node.js v{version} erkannt. Bitte aktualisieren Sie auf Version 23 oder neuer.', changelog: 'Anderungsprotokoll', noChangelog: 'Kein Anderungsprotokoll verfugbar', kanban: 'Kanban', groupTools: 'Werkzeuge', groupPlatform: 'Plattform', gateways: 'Gateways', expand: 'Menü ausklappen', collapse: 'Menü einklappen', }, performance: { title: 'Leistung', subtitle: 'Systemressourcen, Bridge Broker, Workers und aktive Sitzungen überwachen', refresh: 'Aktualisieren', autoRefreshOn: 'Automatisch aktualisieren', autoRefreshOff: 'Manuell aktualisieren', loadFailed: 'Leistungsdaten konnten nicht geladen werden', systemCpu: 'System-CPU', systemMemory: 'Systemspeicher', activeSessions: 'Aktive Sitzungen', runningSessions: 'Laufend {count}', workers: 'Workers', totalWorkerMemory: 'Worker-Gesamtspeicher', processes: 'Prozesse', uptime: 'Laufzeit', running: 'Läuft', stopped: 'Gestoppt', workerMemory: 'Worker-Speicher', lastUpdated: 'Aktualisiert', profile: 'Profile', memory: 'Speicher', sessions: 'Sitzungen', runningActiveSessions: 'Laufend / Aktiv', lastUsed: 'Zuletzt verwendet', status: 'Status', noWorkers: 'Keine Workers', sessionsByProfile: 'Sitzungen nach Profile', noActiveSessions: 'Keine aktiven Sitzungen', }, // Drawer drawer: { terminal: 'Konsole', files: 'Arbeitsbereich', }, // Chat chat: { contextRemaining: 'übrig', contextClickToEdit: 'Klicken zum Bearbeiten der Kontextlänge', contextEditTitle: 'Kontextlänge bearbeiten', contextEditDesc: 'Kontextlängenlimit für aktuelles Modell festlegen (in Tokens)', contextEditPlaceholder: 'Kontextlänge eingeben', contextEditHint: 'Häufige Werte: 200k (Claude), 128k (GPT-4), 32k (GPT-3.5)', contextEditSave: 'Speichern', contextEditCancel: 'Abbrechen', contextEditInvalid: 'Bitte geben Sie eine gültige Kontextlänge ein', contextEditSuccess: 'Kontextlänge aktualisiert', contextEditFailed: 'Aktualisierung fehlgeschlagen', emptyState: 'Starten Sie eine Konversation mit Hermes Agent', outlineTitle: 'Konversationsübersicht', outlineEmpty: 'Kein Konversationsinhalt', outlineUserQuestion: 'Benutzerfrage', inputPlaceholder: 'Nachricht eingeben... (Enter zum Senden, Shift+Enter fur neue Zeile)', slashCommandArgs: { message: '', title: '', text: '', }, slashCommands: { usage: 'Nutzung der aktuellen Sitzung berechnen', status: 'Sitzungsstatus und Warteschlange anzeigen', abort: 'Aktiven Bridge-Lauf stoppen', queue: 'Nachricht hinter dem aktiven Lauf einreihen', clear: 'Aktuelle Anzeige leeren', clearHistory: 'Gespeicherten Nachrichtenverlauf dieser Sitzung löschen', title: 'Diese Sitzung umbenennen', compress: 'Kontextkomprimierung im Leerlauf ausführen', steer: 'Steuertext an den aktiven Bridge-Lauf senden', destroy: 'Bridge-Agent für diese Sitzung freigeben', }, attachFiles: 'Dateien anhangen', showToolCalls: 'Tool-Aufrufe anzeigen', hideToolCalls: 'Tool-Aufrufe ausblenden', messageQueue: 'Nachrichtenwarteschlange', removeQueuedMessage: 'Nachricht aus Warteschlange entfernen', stop: 'Stopp', send: 'Senden', contextUsed: 'Kontext verwendet:', sessions: 'Sitzungen', webUiSessions: 'Sitzungen', allProfiles: 'Alle Profile', profileMissingModelsTip: 'Profil "{profile}" hat keinen verfuegbaren Provider oder kein Modell fuer diese Sitzung', sessionScopeHint: 'Chat zeigt nur Web-UI/API-Server-Sitzungen. CLI-, Telegram-, Discord-, Cron- und andere Kanal-Sitzungen sind schreibgeschützt im Verlauf.', openHistory: 'Verlauf öffnen', hermesHistory: 'Hermes-Verlauf', historyScopeHint: 'Schreibgeschützte Hermes-Verlaufssitzungen des aktuellen Profils, nach Quelle gruppiert.', noSessions: 'Keine Sitzungen', newChat: 'Neuer Chat', approvalKicker: 'Terminal-Berechtigung', approvalTitle: 'Befehl vor dem Ausführen prüfen', approvalAllowOnce: 'Einmal erlauben', approvalAllowSession: 'Sitzung erlauben', approvalAlways: 'Immer', approvalDeny: 'Ablehnen', deleteSession: 'Diese Sitzung loschen?', toggleBatchMode: 'Batch-Auswahl', selectAll: 'Alle auswählen', confirmBatchDelete: '{count} ausgewählte Sitzungen löschen?', batchDeleteSuccess: '{count} Sitzungen gelöscht', batchDeletePartial: '{failed} Sitzungen konnten nicht gelöscht werden', batchDeleteFailed: 'Batch-Löschung fehlgeschlagen', sessionDeleted: 'Sitzung geloscht', rename: 'Umbenennen', pin: 'Anheften', unpin: 'Lösen', pinned: 'Angeheftet', chatMode: 'Chatmodus', liveMode: 'Live-Modus', liveSessions: 'Live-Sitzungen', recentBadge: 'Kürzlich', linkedSessions: '{count} verknüpft', noVisibleMessages: 'Keine für Menschen sichtbaren Nachrichten.', monitorRoleUser: 'Benutzer', monitorRoleAssistant: 'Assistent', copySessionId: 'Sitzungs-ID kopieren', export: 'Exportieren', exportFull: 'Vollständiger Export (JSON)', exportCompressed: 'Komprimierter Export (TXT)', exportCompressing: 'Komprimiere Kontext, bitte warten...', exportSuccess: 'Sitzung exportiert', exportFailed: 'Export fehlgeschlagen', renamed: 'Umbenannt', renameFailed: 'Umbenennung fehlgeschlagen', renameSession: 'Sitzung umbenennen', sessionNotFound: 'Sitzung nicht gefunden', enterNewTitle: 'Neuen Titel eingeben', other: 'Sonstige', runFailed: 'Ausfuhrung fehlgeschlagen', error: 'Fehler', tool: 'Werkzeug', arguments: 'Argumente', result: 'Ergebnis', truncated: '... (abgeschnitten)', executionDuration: 'Ausführungszeit', thinkingLabel: 'Denkprozess', thinkingInProgress: 'Denkt…', thinkingShow: 'Denkprozess anzeigen', thinkingHide: 'Denkprozess ausblenden', thinkingDuration: 'Beobachtet {duration}', thinkingChars: '{count} Zeichen', copyBubble: 'Nachricht kopieren', copiedBubble: 'Nachricht kopiert', copyFailed: 'Kopieren fehlgeschlagen', playSpeech: 'Sprache abspielen', pauseSpeech: 'Pausieren', resumeSpeech: 'Fortsetzen', stopSpeech: 'Stoppen', speechNotSupported: 'Sprachwiedergabe in diesem Browser nicht unterstützt', searchEnterHint: 'Enter zum Öffnen · Esc zum Schließen', searchHint: 'Cmd/Ctrl+K', searchScope: 'Suchbereich: nur lokale Web-UI-Sitzungsdatenbank; schreibgeschützte Hermes-Verlaufssitzungen sind nicht enthalten.', searchFailed: 'Sitzungssuche fehlgeschlagen', searchNoSnippet: 'Keine Vorschau verfügbar', searchNoResults: 'Keine passenden Sitzungen', searchRecent: 'Letzte Sitzung', searchEmpty: 'Letzte Sitzungen', searchPlaceholder: 'Sitzungen suchen...', searchSubtitle: 'Nach Titel oder Nachrichteninhalt suchen', searchTitle: 'Sitzungen suchen', stopGateway: 'Gateway stoppen', start: 'Starten', workspaceSetFailed: 'Workspace konnte nicht festgelegt werden', workspaceSet: 'Workspace festgelegt', workspacePlaceholder: 'Projektpfad eingeben, z. B. /home/user/project', workspace: 'Arbeitsbereich', setWorkspaceTitle: 'Sitzungs-Workspace festlegen', setWorkspace: 'Workspace festlegen', modelSetFailed: 'Modell konnte nicht festgelegt werden', modelSet: 'Modell festgelegt', setModelTitle: 'Sitzungsmodell festlegen', setModel: 'Modell festlegen', newCliChat: 'Neue CLI', cliEmptyState: 'CLI-Chat starten', autoPlaySpeech: 'Sprache automatisch abspielen', }, // Jobs jobs: { title: 'Geplante Aufgaben', createJob: 'Aufgabe erstellen', editJob: 'Aufgabe bearbeiten', noJobs: 'Noch keine geplanten Aufgaben. Erstellen Sie eine, um zu beginnen.', name: 'Name', namePlaceholder: 'Aufgabenname', schedule: 'Zeitplan (Cron-Ausdruck)', schedulePlaceholder: 'z. B. 0 9 * * *', quickPresets: 'Schnellvorgaben', selectPreset: 'Vorgabe auswahlen...', presetEveryMinute: 'Jede Minute', presetEvery5Min: 'Alle 5 Minuten', presetEveryHour: 'Jede Stunde', presetEveryDay: 'Jeden Tag um 00:00', presetEveryDay9: 'Jeden Tag um 09:00', presetEveryMonday: 'Jeden Montag um 09:00', presetEveryMonth: 'Am 1. jedes Monats um 09:00', prompt: 'Eingabeaufforderung', promptPlaceholder: 'Der auszufuhrende Prompt', deliverTarget: 'Zustellziel', origin: 'Herkunft', local: 'Lokal', repeatCount: 'Wiederholungsanzahl (optional)', modelPlaceholder: 'Standardmodell', repeatPlaceholder: 'Leer lassen fur unendlich', jobCreated: 'Aufgabe erstellt', jobUpdated: 'Aufgabe aktualisiert', nameRequired: 'Name ist erforderlich', scheduleRequired: 'Zeitplan ist erforderlich', loadFailed: 'Laden der Aufgabe fehlgeschlagen', jobPaused: 'Aufgabe pausiert', jobResumed: 'Aufgabe fortgesetzt', jobTriggered: 'Job ausgelost', modelUpdated: 'Modell aktualisiert', jobDeleted: 'Aufgabe geloscht', status: { running: 'Lauft', paused: 'Pausiert', disabled: 'Deaktiviert', scheduled: 'Geplant', }, info: { model: 'Modell', schedule: 'Zeitplan', lastRun: 'Letzte Ausfuhrung', nextRun: 'Nachste Ausfuhrung', deliver: 'Zustellung', repeat: 'Wiederholung', }, action: { pause: 'Pausieren', pauseJob: 'Aufgabe pausieren', resume: 'Fortsetzen', resumeJob: 'Aufgabe fortsetzen', runNow: 'Jetzt ausfuhren', triggerImmediately: 'Sofort auslösen', }, runHistory: { title: 'Verlauf', runs: 'Läufe', noRuns: 'Kein Verlauf gefunden.', }, }, // Skills skills: { title: 'Fahigkeiten', searchPlaceholder: 'Fahigkeiten suchen...', noMatch: 'Keine Fahigkeiten entsprechen Ihrer Suche', noSkills: 'Keine Fahigkeiten gefunden', backTo: 'Zuruck zu', attachedFiles: 'Angehange Dateien', loadFailed: 'Laden der Fahigkeit fehlgeschlagen', fileLoadFailed: 'Laden der Datei fehlgeschlagen', modified: 'Benutzerbearbeitet', archived: 'Archiviert', pinned: 'Angeheftet', pin: 'Fahigkeit anheften', unpin: 'Anheften aufheben', pinFailed: 'Anheft-Status konnte nicht geandert werden', toggleFailed: 'Aktivieren/Deaktivieren der Fahigkeit fehlgeschlagen', source: { builtin: 'Integriert', hub: 'Hub', local: 'Lokal', }, }, // Plugins plugins: { title: 'Plugins', refresh: 'Aktualisieren', notice: 'Schreibgeschütztes Inventar erkennbarer Hermes-Plugin-Manifeste. Discovery-Metadaten werden gelesen, ohne Plugin-Code zu laden. Verwaltungsaktionen bleiben in v1 im CLI; Änderungen gelten für neue Hermes-Sitzungen.', loadFailed: 'Plugins konnten nicht geladen werden', commandCopied: 'Befehl kopiert', searchPlaceholder: 'Key, Name, Beschreibung, Pfad suchen...', source: 'Quelle', kind: 'Typ', statusTitle: 'Status', configStatus: 'config: {status}', notAvailable: 'n/a', copyCommand: 'Befehl kopieren', managedElsewhere: 'anderweitig verwaltet', noMatch: 'Keine Plugins passen zu den aktuellen Filtern', enabled: 'aktiviert', disabled: 'deaktiviert', summary: { total: 'Gesamt', active: 'Aktiviert / auto', inactive: 'Inaktiv', disabled: 'Deaktiviert', providerManaged: 'Provider-verwaltet', }, status: { enabled: 'Aktiviert', 'auto-active': 'Auto-aktiv', inactive: 'Inaktiv', disabled: 'Deaktiviert', 'provider-managed': 'Provider-verwaltet', }, statusLabel: { enabled: 'Per Konfiguration aktiviert', 'auto-active': 'Auto-aktiv', inactive: 'Inaktiv', disabled: 'Deaktiviert', 'provider-managed': 'Provider-verwaltet', }, configStatuses: { enabled: 'aktiviert', disabled: 'deaktiviert', 'not-enabled': 'nicht aktiviert', auto: 'auto', 'provider-managed': 'provider-verwaltet', }, table: { plugin: 'Plugin', status: 'Status', source: 'Quelle', kind: 'Typ', capabilities: 'Fähigkeiten', path: 'Pfad / Entry Point', cli: 'CLI', }, capabilities: { tools: '{count} Tools', hooks: '{count} Hooks', env: '{count} env', }, metadata: { agentRoot: 'Agent-Stammverzeichnis', python: 'Python', scanCwd: 'Arbeitsverzeichnis scannen', projectPlugins: 'Projekt-Plugins', }, }, // Memory memory: { title: 'Gedachtnis', refresh: 'Aktualisieren', loadFailed: 'Laden des Gedachtnisses fehlgeschlagen', myNotes: 'Meine Notizen', noNotes: 'Noch keine Notizen.', notesPlaceholder: 'Notizen schreiben...', userProfile: 'Benutzerprofil', noProfile: 'Noch kein Profil.', profilePlaceholder: 'Profil schreiben...', soul: 'Seele', noSoul: 'Noch keine Seelenkonfiguration.', soulPlaceholder: 'Seelenkonfiguration schreiben...', }, // Models models: { title: 'Modelle', addProvider: 'Anbieter hinzufugen', providerType: 'Anbietertyp', preset: 'Vorgabe', custom: 'Benutzerdefiniert', selectProvider: 'Anbieter auswahlen', chooseProvider: 'Anbieter wahlen...', name: 'Name', autoGeneratedName: 'Automatisch aus Basis-URL generiert', baseUrl: 'Basis-URL', region: 'Region', regionIntl: 'International', regionCn: 'Festlandchina', baseUrlPlaceholder: 'z. B. https://api.example.com/v1', apiKey: 'API-Schlussel', apiKeyPlaceholder: 'sk-...', defaultModel: 'Standardmodell', selectOrInput: 'Modell auswählen oder eingeben...', selectModel: 'Modell auswahlen...', providerAdded: 'Anbieter hinzugefugt', providerDeleted: 'Anbieter geloscht', deleteProvider: 'Anbieter loschen', deleteConfirm: 'Mochten Sie "{name}" wirklich loschen?', codexLoginTitle: 'OpenAI Codex Anmeldung', codexWaiting: 'Geben Sie diesen Code auf der Autorisierungsseite ein, um sich anzumelden:', codexCopyCode: 'Code kopiert', codexOpenLink: 'Autorisierungsseite öffnen', codexApproved: 'Anmeldung erfolgreich', codexExpired: 'Die Autorisierung ist abgelaufen. Bitte versuchen Sie es erneut.', nousLoginTitle: 'Nous-Portal-Anmeldung', nousWaiting: 'Geben Sie diesen Code auf der Autorisierungsseite ein:', nousCopyCode: 'Code kopiert', nousOpenLink: 'Autorisierungsseite öffnen', nousApproved: 'Login erfolgreich', nousDenied: 'Autorisierung wurde abgelehnt', nousExpired: 'Autorisierung abgelaufen', copilotLoginTitle: 'GitHub Copilot Anmeldung', copilotWaiting: 'Öffnen Sie GitHub und geben Sie den unten angezeigten Gerätecode ein. Das Fenster schließt sich automatisch nach Genehmigung.', copilotCopyCode: 'Code kopiert', copilotOpenLink: 'GitHub-Autorisierungsseite öffnen', copilotApproved: 'Anmeldung erfolgreich!', copilotDenied: 'Autorisierung abgelehnt.', copilotExpired: 'Der Autorisierungslink ist abgelaufen. Bitte erneut versuchen.', copilotAddDetectedTitle: 'GitHub Copilot erkannt', copilotAddDetected: 'Auf diesem Rechner wurde ein GitHub Copilot OAuth-Token erkannt. Klicken Sie auf „Hinzufügen", um Copilot in Hermes zu aktivieren.', copilotAddSourceEnv: 'Quelle: ~/.hermes/.env (COPILOT_GITHUB_TOKEN)', copilotAddSourceGhCli: 'Quelle: gh CLI (gh auth token)', copilotAddSourceAppsJson: 'Quelle: VS Code Copilot-Erweiterung (apps.json)', copilotDeleteHintEnv: 'Dies löscht COPILOT_GITHUB_TOKEN in ~/.hermes/.env. Andere Tools sind nicht betroffen.', copilotDeleteHintGhCli: 'Copilot wird aus Hermes ausgeblendet. Ihre gh CLI-Anmeldung bleibt erhalten — `gh auth status` zeigt weiterhin als angemeldet.', copilotDeleteHintAppsJson: 'Copilot wird aus Hermes ausgeblendet. Ihre VS Code Copilot-Erweiterung bleibt angemeldet.', customBadge: 'BENUTZERDEF.', previewBadge: 'VORSCHAU', disabledBadge: 'NICHT VERFÜGBAR', disabledTooltip: "Dieses Modell ist für Ihr Konto derzeit nicht verfügbar.", customModelPlaceholder: 'Nicht gelistete Modell-ID', customModelHint: 'Für vom Provider unterstützte Modelle, die die API nicht zurückgibt; keine Anzeige-Umbenennung. Enter zum Laden.', noProviders: 'Keine Anbieter gefunden. Fugen Sie einen benutzerdefinierten Anbieter hinzu, um zu beginnen.', clearVisibleModels: 'Auswahl löschen', currentDefault: 'Aktueller Standard', defaultShort: 'Standard', builtIn: 'Integriert', customType: 'Benutzerdefiniert', provider: 'Anbieter', contextLength: 'Kontextlange', contextLengthPlaceholder: 'z.B. 200000 (optional)', local: 'Lokal ({host})', selectProviderRequired: 'Bitte wahlen Sie einen Anbieter', baseUrlRequired: 'Basis-URL ist erforderlich', apiKeyRequired: 'API-Schlussel ist erforderlich', modelRequired: 'Standardmodell ist erforderlich', enterBaseUrl: 'Bitte geben Sie zuerst die Basis-URL ein', unexpectedFormat: 'Unerwartetes Antwortformat', foundModels: '{count} Modelle gefunden', fetchFailed: 'Abrufen der Modelle fehlgeschlagen', xaiWaiting: 'Schließen Sie die Autorisierung auf der geöffneten xAI-Seite ab. Das Fenster schließt sich nach der Freigabe automatisch.', xaiOpenLink: 'xAI-Autorisierungsseite öffnen', xaiLoginTitle: 'xAI Grok OAuth-Anmeldung', xaiExpired: 'Der Autorisierungslink ist abgelaufen. Bitte erneut versuchen.', xaiCopyLink: 'Autorisierungslink kopieren', xaiApproved: 'Anmeldung erfolgreich!', visibilitySelectOne: 'Mindestens ein sichtbares Modell behalten', visibilitySaved: 'Sichtbare Modelle gespeichert', visibilitySaveFailed: 'Sichtbare Modelle konnten nicht gespeichert werden', visibilityHint: 'Wirkt sich nur auf Modellauswahl und Modellseite der Web UI aus. Die provider/model-Konfiguration der Hermes CLI wird nicht geändert; Aufrufe verwenden weiterhin die ursprüngliche Modell-ID.', showAllModels: 'Alle Modelle anzeigen', searchPlaceholder: 'Modelle suchen...', removeCustomModel: 'Dieses nicht gelistete Modell entfernen', more: 'weitere', models: 'Modellliste', manageVisibleModelsFor: 'Sichtbare Modelle für {name} verwalten', manageVisibleModels: 'Sichtbare Modelle verwalten', getApiKey: 'API Key abrufen', count: 'Modelle', aliasUseOriginal: 'Ursprüngliche ID wiederherstellen', aliasTitleFor: 'Anzeigename für {model}', aliasTitle: 'Modell-Anzeigename', aliasSaveFailed: 'Anzeigename konnte nicht gespeichert werden', aliasPlaceholder: 'Leer lassen, um die ursprüngliche Modell-ID zu verwenden', aliasManageFor: 'Anzeigenamen für {provider}', aliasManage: 'Anzeigenamen', aliasHint: 'Ändert nur den Anzeigenamen in der Web UI. Hermes erhält weiterhin die ursprüngliche Modell-ID.', aliasEdit: 'Umbenennen', aliasCanonical: 'Original-ID: {model}', }, // Profiles profiles: { title: 'Profile', create: 'Profil erstellen', import: 'Importieren', export: 'Exportieren', rename: 'Umbenennen', delete: 'Loschen', switchTo: 'Wechseln zu', switchConfirm: 'Das Wechseln zum Profil "{name}" startet das Gateway neu. Fortfahren?', switchSuccess: 'Zum Profil "{name}" gewechselt', switchFailed: 'Profilwechsel fehlgeschlagen. Moglicherweise muss das Gateway manuell neu gestartet werden.', createSuccess: 'Profil "{name}" erstellt', createFailed: 'Erstellen des Profils fehlgeschlagen', renameSuccess: 'Profil umbenannt', renameFailed: 'Umbenennung des Profils fehlgeschlagen', deleteConfirm: 'Mochten Sie das Profil "{name}" wirklich loschen?', deleteSuccess: 'Profil geloscht', deleteFailed: 'Loschen des Profils fehlgeschlagen', exportSuccess: 'Profil exportiert', exportFailed: 'Exportieren des Profils fehlgeschlagen', importSuccess: 'Profil importiert', importFailed: 'Importieren des Profils fehlgeschlagen', importSelectFile: 'Archivdatei auswahlen', importInvalidFile: 'Bitte wahlen Sie ein gultiges Archiv (.tar.gz, .tgz, .gz, .zip)', name: 'Profilname', namePlaceholder: 'Nur Buchstaben, Zahlen und Bindestriche', nameValidation: 'Profilname darf nur Kleinbuchstaben, Zahlen, Unterstriche und Bindestriche enthalten', newName: 'Neuer Name', newNamePlaceholder: 'Neuen Namen eingeben', cloneFromCurrent: 'Aus aktuellem Profil klonen', cloneCleanupNotice: 'Beim Klonen werden exklusive Plattform-Anmeldeinformationen (Weixin / Telegram / Slack usw.) automatisch übersprungen, um Konflikte mit dem Quellprofil zu vermeiden', cloneStrippedCredentials: '{count} exklusive Anmeldeinformation(en) entfernt: {list}', cloneDisabledPlatforms: '{count} Plattform(en) deaktiviert: {list}', cloneStrippedConfigCredentials: '{count} eingebettete Anmeldeinformation(en) aus config.yaml entfernt: {list}', archivePath: 'Archivpfad', archivePathPlaceholder: 'Serverpfad zur Archivdatei', importName: 'Profilname (optional)', importNamePlaceholder: 'Leer lassen, um den Archivnamen zu verwenden', active: 'Aktiv', model: 'Modell', gateway: 'Gateway', alias: 'Alias', provider: 'Anbieter', path: 'Pfad', skills: 'Fahigkeiten', hasEnv: 'Hat .env', hasSoulMd: 'Hat soul.md', noProfiles: 'Keine Profile gefunden. Erstellen Sie eines, um zu beginnen.', avatar: { title: 'Eigenes Avatar', customize: 'Avatar anpassen', upload: 'Bild hochladen', random: 'Zufällig erzeugen', reset: 'Standard wiederherstellen', hint: 'PNG, JPEG oder WebP, maximal 1 MB', invalidType: 'Bitte ein PNG-, JPEG- oder WebP-Bild wählen', tooLarge: 'Das Avatar-Bild darf höchstens 1 MB groß sein', saveSuccess: 'Avatar gespeichert', saveFailed: 'Avatar konnte nicht gespeichert werden', resetSuccess: 'Standard-Avatar wiederhergestellt', resetFailed: 'Standard-Avatar konnte nicht wiederhergestellt werden', }, runtime: { activeProfile: 'Aktuell: {name}', bridgeWorker: 'Bridge-Status', gateway: 'Gateway', active: 'Aktiv', activeTag: 'Aktuell', idle: 'Leerlauf', running: 'Läuft', stopped: 'Gestoppt', restartGateway: 'Gateway neu starten', restartProfile: 'Profil neu starten', switchProfile: 'Profil wechseln', gatewayRestarted: 'Gateway neu gestartet: {name}', gatewayRestartFailed: 'Gateway-Neustart fehlgeschlagen', profileRestarted: 'Profil neu gestartet: {name}', profileRestartFailed: 'Profil-Neustart fehlgeschlagen', }, }, // Logs logs: { title: 'Protokolle', all: 'Alle', searchPlaceholder: 'Suchen...', refresh: 'Aktualisieren', noEntries: 'Keine Protokolleintrage', }, // Settings settings: { title: 'Einstellungen', saved: 'Gespeichert', saveFailed: 'Speichern fehlgeschlagen', tabs: { display: 'Anzeige', account: 'Konto', agent: 'Agent', memory: 'Gedachtnis', compression: 'Komprimierung', session: 'Sitzung', privacy: 'Datenschutz', apiServer: 'API-Server', models: 'Modelle', voice: 'Sprache', }, display: { streaming: 'Streaming-Antworten', streamingHint: 'KI-Antworten in Echtzeit anzeigen', compact: 'Kompaktmodus', compactHint: 'Nachrichtenabstand reduzieren', showReasoning: 'Schlussfolgerung anzeigen', showReasoningHint: 'Denkprozess des Modells anzeigen', showCost: 'Kosten anzeigen', showCostHint: 'Token-Nutzung in Antworten anzeigen', inlineDiffs: 'Inline-Diffs', inlineDiffsHint: 'Codeanderungen inline anzeigen', bellOnComplete: 'Abschluss-Signalton', bellOnCompleteHint: 'Ton abspielen, wenn die KI fertig ist', busyInputMode: 'Eingabemodus bei Beschaftigung', busyInputModeHint: 'Eingabe erlauben, wahrend die KI verarbeitet', theme: 'Design', themeHint: 'Hell, Dunkel oder Systemeinstellung verwenden', themeLight: 'Hell', themeDark: 'Dunkel', themeSystem: 'System', }, agent: { maxTurns: 'Maximale Runden', maxTurnsHint: 'Maximale Interaktionsrunden pro Konversation', gatewayTimeout: 'Gateway-Timeout', gatewayTimeoutHint: 'Anfrage-Timeout in Sekunden', restartDrainTimeout: 'Neustart-Drain-Timeout', restartDrainTimeoutHint: 'Drain-Timeout vor Neustart in Sekunden', toolEnforcement: 'Werkzeuferzwingung', toolEnforcementHint: 'Ausfuhrungsmodus fur Werkzeugaufrufe steuern', auto: 'Automatisch', always: 'Immer', never: 'Nie', }, memory: { enabled: 'Gedachtnis aktivieren', enabledHint: 'KI erlauben, den Konversationskontext zu merken', userProfile: 'Benutzerprofil', userProfileHint: 'KI erlauben, Benutzereinstellungen zu merken', charLimit: 'Zeichenlimit fur Gedachtnis', charLimitHint: 'Maximale Zeichen fur MEMORY.md', userCharLimit: 'Zeichenlimit fur Benutzerprofil', userCharLimitHint: 'Maximale Zeichen fur USER.md', }, compression: { enabled: 'Komprimierung aktivieren', enabledHint: 'Langen Chatverlauf automatisch komprimieren, bevor der Modellkontext uberschritten wird', threshold: 'Komprimierungsschwelle', thresholdHint: 'Komprimierung starten, wenn geschatzte Token dieses Kontextverhaltnis uberschreiten', targetRatio: 'Zielverhaltnis', targetRatioHint: 'Zielgroße des Verlaufs nach der Komprimierung als Kontextverhaltnis', protectLastN: 'Neueste Nachrichten schutzen', protectLastNHint: 'So viele neueste Nachrichten unkomprimiert lassen', protectFirstN: 'Erste Nachrichten schutzen', protectFirstNHint: 'So viele erste Nachrichten unkomprimiert lassen', }, session: { mode: 'Zurucksetzungsmodus', modeHint: 'Ausloser fur Sitzungszurucksetzung', modeBoth: 'Inaktivitat + Geplant', modeIdle: 'Nur Inaktivitat', modeDaily: 'Nur Geplant', modeNone: 'Nie (nur manuell)', idleMinutes: 'Inaktivitats-Timeout', idleMinutesHint: 'Wartezeit vor automatischer Zurucksetzung (Minuten)', atHour: 'Geplante Zurucksetzungszeit', humanOnly: 'Nur menschliche Sitzungen anzeigen', humanOnlyHint: 'Unteragenten- und Sitzungsmonitor-Rauschen standardmäßig ausblenden', liveMonitorHumanOnly: 'Live-Monitor: nur menschliche Sitzungen anzeigen', liveMonitorHumanOnlyHint: 'Im Live-Monitor Unteragenten- und Sitzungsmonitor-Rauschen standardmäßig ausblenden', atHourHint: 'Sitzung taglich zu dieser Stunde zurucksetzen', requireAuth: 'Sitzungsautorisierung', requireAuthHint: 'Erfordert Autorisierung für Sitzungsvorgänge', }, privacy: { redactPii: 'Personliche Daten maskieren', redactPiiHint: 'Sensible Informationen automatisch erkennen und ausblenden (Passworter, Schlussel usw.)', }, apiServer: { enable: 'Aktivieren', enableHint: 'API-Server aktivieren', host: 'Host', hostHint: 'Listen-Adresse', port: 'Port', portHint: 'Listen-Port', key: 'Schlussel', keyHint: 'API-Zugangsschlussel', cors: 'CORS-Ursprunge', corsHint: 'Erlaubte Cross-Origin-Quellen', }, voice: { ttsProvider: 'TTS-Anbieter', ttsProviderHint: 'Waehlen Sie die Sprachsynthese-Engine fuer die Nachrichtenwiedergabe', providerWebSpeech: 'WebSpeech API (Browser)', providerOpenai: 'OpenAI TTS', providerCustom: 'Benutzerdefinierter Endpunkt (OpenAI-kompatibel)', providerEdge: 'Edge TTS (Kostenlos, kein API-Key erforderlich)', // WebSpeech webspeechVoice: 'Stimme', webspeechVoiceHint: 'Waehlen Sie eine Stimme aus Ihrem Browser oder Betriebssystem', webspeechVoicePlaceholder: 'Auto (Standardstimme)', // OpenAI openaiKey: 'API-Key', openaiKeyHint: 'Ihr OpenAI API-Key mit TTS-Zugriff', openaiUrl: 'API-Basis-URL', openaiUrlHint: 'z.B. https://api.openai.com/v1/audio/speech', openaiModel: 'Modell', openaiModelHint: 'tts-1 (schneller) / tts-1-hd (hoehere Qualitaet)', openaiVoice: 'Stimme', openaiVoiceHint: 'Stimme fuer die Synthese', // Custom endpoint customHint: 'Jede OpenAI-kompatible TTS-API verwenden — funktioniert mit GPT-SoVITS, CosyVoice, usw.', customUrl: 'API-URL', customUrlHint: 'Basis-URL Ihres TTS-Dienstes', customUrlPlaceholder: 'Die im lokalen Adapter konfigurierte Adresse, z.B. http://127.0.0.1:9880', customApiKey: 'API-Key (optional)', customApiKeyHint: 'Einige benutzerdefinierte Endpunkte erfordern Authentifizierung', customApiKeyPlaceholder: 'Leer lassen wenn nicht benoetigt', // Edge TTS edgeHint: 'Angetrieben von Microsoft Edge TTS (node-edge-tts).', edgeUrl: 'Adapter-URL', edgeUrlHint: 'Adresse des Edge TTS-Adapters, z.B. http://127.0.0.1:9882', edgeUrlPlaceholder: 'http://127.0.0.1:9882', edgeVoice: 'Stimme', edgeVoiceHint: 'Waehlen Sie eine Stimme fuer die Sprachsynthese', edgeRate: 'Geschwindigkeit', edgeRateHint: 'Sprachgeschwindigkeit anpassen (0,5x ~ 2,0x)', edgePitch: 'Tonhöhe', edgePitchHint: 'Tonhöhe anpassen (-20 ~ +20 Hz)', // Test testTitle: 'Sprachtest', testText: 'Testtext', testTextPlaceholder: 'Text zum Testen eingeben...', testTextDefault: 'Hallo, dies ist ein Sprachtest.', testButton: 'Testen', testButtonPlaying: 'Wiedergabe...', testFailed: 'Test fehlgeschlagen: {error}', // MiMo TTS providerMimo: 'MiMo TTS', mimoHint: 'Xiaomi MiMo TTS — unterstützt Voreingestellte Stimmen, Stimmdesign und Stimmklonung', mimoApiKey: 'API-Schluessel', mimoApiKeyHint: 'Holen Sie sich Ihren Schluessel auf platform.xiaomimimo.com', mimoApiKeyPlaceholder: 'MiMo API-Schluessel', mimoBaseUrl: 'Basis-URL', mimoBaseUrlHint: 'MiMo API-Endpunkt-URL', mimoModel: 'Modell', mimoModelHint: 'Sprachsynthesemodell auswählen', mimoModelPreset: 'Voreingestellte Stimmen', mimoModelVoiceDesign: 'Stimmdesign', mimoModelVoiceClone: 'Stimmklonung', mimoVoice: 'Stimme', mimoVoiceHint: 'Voreingestellte Stimme auswählen', mimoVoiceDesignPrompt: 'Stimmbeschreibung', mimoVoiceDesignPromptHint: 'Beschreiben Sie die gewünschten Stimmmerkmale', mimoVoiceDesignPromptPlaceholder: 'Z.B.: Eine warme junge Frauenstimme, etwas langsam, mit magnetischem Ton', mimoCloneAudio: 'Audio hochladen', mimoCloneAudioHint: 'Audio-Beispiel für Stimmklonung hochladen (mp3/wav, max. 10 MB)', mimoCloneAudioUpload: 'Datei auswählen', mimoCloneAudioClear: 'Löschen', mimoStylePrompt: 'Stil-Eingabe', mimoStylePromptHint: 'Optional — beschreiben Sie den Sprechstil in natürlicher Sprache', mimoStylePromptPlaceholder: 'Z.B.: Heller, lebhafter Ton, schnelles Tempo', }, lockedIps: { title: 'Gesperrte IPs', count: '{count} gesperrt', empty: 'Keine gesperrten IPs', unlock: 'Entsperren', unlockAll: 'Alle entsperren', unlockAllConfirm: 'Alle gesperrten IPs entsperren?', unlocked: 'IP entsperrt', allUnlocked: '{count} IPs entsperrt', }, models: { apiKey: 'API Key', apiKeyPlaceholder: 'API Key eingeben', noProviders: 'Keine Provider konfiguriert', save: 'Speichern', saveFailed: 'Speichern fehlgeschlagen', saved: 'Gespeichert', }, }, // Platform channel settings platform: { requireMention: "Erwahnung {'@'} erfordern", requireMentionGroup: "Erwahnung {'@'} in Gruppen erfordern zum Antworten", requireMentionChannel: "Erwahnung {'@'} in Kanalen erfordern zum Antworten", requireMentionRoom: "Erwahnung {'@'} in Raumen erfordern zum Antworten", reactions: 'Reaktionen', reactionsHint: 'Auf Nachrichten mit Emoji reagieren', freeResponseChats: 'Frei antwortende Chats', freeResponseChatsHint: "Chat-IDs, die ohne {'@'}Erwahnung antworten (komma-getrennt)", freeResponseChannels: 'Frei antwortende Kanale', freeResponseChannelsHint: "Kanal-IDs, die ohne {'@'}Erwahnung antworten (komma-getrennt)", freeResponseRooms: 'Frei antwortende Raume', freeResponseRoomsHint: "Raum-IDs, die ohne {'@'}Erwahnung antworten (komma-getrennt)", mentionPatterns: 'Benutzerdefinierte Erwahnungsmuster', mentionPatternsHint: 'Zusatzliche Auslosermuster', autoThread: 'Auto-Thread', autoThreadHint: "Automatisch Antwort-Threads nach {'@'}Erwahnung erstellen", autoThreadHintRoom: 'Automatisch Antwort-Threads in Raumen erstellen', dmMentionThreads: 'DM-Erwahnungs-Threads', dmMentionThreadsHint: 'Thread-Antworten fur Erwahnungen in DMs verwenden', allowBots: 'Bot-Nachrichten erlauben', allowBotsHint: 'Auf Nachrichten von anderen Bots antworten', allowedChannels: 'Erlaubte Kanale', allowedChannelsHint: 'Whitelist der Kanal-IDs (komma-getrennt)', ignoredChannels: 'Ignorierte Kanale', ignoredChannelsHint: 'Kanale, in denen der Bot nie antwortet (komma-getrennt)', noThreadChannels: 'Thread-lose Kanale', noThreadChannelsHint: 'Kanale, in denen der Bot ohne Threads antwortet (komma-getrennt)', exclusiveTokenWarning: 'Diese Plattform verwendet einen exklusiven Token-Lock. Jedes Profil muss einen anderen Identitäts-Token verwenden, um Konflikte mit anderen Profilen zu vermeiden.', botToken: 'Bot-Token', botTokenHint: 'Bot-Token vom Entwicklerportal', accessToken: 'Zugangs-Token', accessTokenHint: 'Matrix-Zugangs-Token', homeserver: 'Homeserver-URL', homeserverHint: 'Matrix-Homeserver-URL', appId: 'App-ID', appIdHint: 'Feishu App-ID', appSecret: 'App-Geheimnis', appSecretHint: 'Feishu App-Geheimnis', clientId: 'Client-ID', clientIdHint: 'DingTalk Client-ID', clientSecret: 'Client-Geheimnis', clientSecretHint: 'DingTalk Client-Geheimnis', botId: 'Bot-ID', botIdHint: 'WeCom Bot-ID', wecomSecretHint: 'WeCom Bot-Geheimnis', waEnabled: 'WhatsApp aktivieren', waEnabledHint: 'WhatsApp uber QR-Code-Kopplung aktivieren', weixinToken: 'Weixin-Token', weixinTokenHint: 'Von Weixin-CLI QR-Anmeldung (hermes weixin)', accountId: 'Konto-ID', accountIdHint: 'Weixin-Konto-ID', qrLogin: 'QR-Anmeldung', qrRelogin: 'Erneut anmelden', qrFetching: 'QR-Code wird abgerufen...', qrScanHint: 'Mit WeChat scannen zum Anmelden', qrScanedHint: 'Gescannt, bitte auf dem Gerat bestatigen...', qqSandboxHint: 'Sandbox-Umgebung aktivieren (für Tests)', qqSandbox: 'Sandbox-Modus', qqQrScanHint: 'QR-Code oben mit QQ scannen oder Link auf dem Telefon öffnen, um die Bindung abzuschließen', qqMarkdownHint: 'Markdown-formatierte Nachrichten aktivieren (einige Clients unterstützen dies möglicherweise nicht)', qqMarkdown: 'Markdown-Unterstützung', qqAppSecretHint: 'QQ Open Platform Bot App Secret', qqAppSecret: 'App Secret', qqAppIdHint: 'QQ Open Platform Bot App ID', qqAppId: 'App ID', allowedUsersHint: 'Whitelist für Benutzer-IDs oder OpenIDs, durch Kommas getrennt', allowedUsers: 'Erlaubte Benutzer', allowAllUsersHint: 'Nachrichten von beliebigen Benutzern erlauben; deaktiviert lassen, um die Allowlist zu verwenden', allowAllUsers: 'Alle Benutzer erlauben', }, // Language language: { label: 'Sprache', zh: '中文', en: 'English', de: 'Deutsch', }, // Terminal terminal: { sessions: 'Sitzungen', newTab: 'Neues Terminal', closeSession: 'Diese Sitzung schliessen?', sessionExited: 'Beendet', processExited: 'Prozess beendet mit Code {code}', noSessions: 'Keine Terminal-Sitzungen', connectionFailed: 'Terminaldienstverbindung fehlgeschlagen', connectionClosed: 'Terminalverbindung geschlossen', connectionError: 'Terminalverbindungsfehler', }, // Usage usage: { title: 'Nutzungsstatistiken', refresh: 'Aktualisieren', totalTokens: 'Gesamt-Tokens', inputTokens: 'Eingabe', outputTokens: 'Ausgabe', totalSessions: 'Gesamt-Sitzungen', avgPerDay: '~{n}/Tag Durchschn.', estimatedCost: 'Gesch. Kosten', cacheHitRate: 'Cache-Trefferquote', modelBreakdown: 'Modellaufschluesselung', dailyTrend: 'Tagliche Nutzung', date: 'Datum', tokens: 'Tokens', cache: 'Cache', cacheRead: 'Cache gelesen', cacheWrite: 'Cache geschrieben', sessions: 'Sitzungen', cost: 'Kosten', noData: 'Keine Nutzungsdaten', }, skillsUsage: { title: 'Skill-Nutzung', subtitle: 'Skill-Ladevorgänge und -Bearbeitungen aus Hermes-Sitzungen verfolgen', refresh: 'Aktualisieren', periodSelector: 'Zeitraum der Skill-Nutzung', periodLabel: '{days} T', summary: 'Zusammenfassung', totalActions: 'Aktionen', loads: 'Laden', edits: 'Änd.', distinctSkills: 'Skillzahl', topSkills: 'Top-Skills', dailyTrend: 'Trend', periodSummary: 'Letzte {days} Tage', skill: 'Fähigkeit', share: '%', lastUsed: 'Zuletzt', noData: 'Keine Skill-Nutzungsdaten', loadFailed: 'Skill-Nutzung konnte nicht geladen werden', otherSkills: 'Andere Skills', }, // Anderungsprotokoll changelog: { new_0_5_22_1: 'Hermes-Sessionlisten-API liest jetzt die Profil-Datenbank statt des lokalen Web-UI-Session-Stores', new_0_5_23_1: 'Bridge-only Chat-Slash-Befehle mit lokalisierten Befehlsvorschlägen hinzugefügt', new_0_5_23_2: 'Befehlsverlauf für Session-Replay gespeichert, ohne Modellkontext, Nutzung oder Komprimierung zu verunreinigen', new_0_5_23_3: 'Gateway-Profil-Umgebungsvariablen isoliert, damit Zugangsdaten nicht zwischen Profilen durchsickern', new_0_5_23_4: 'Web-UI-Port bei Gateway-Zuweisung reserviert, um Startkonflikte zu vermeiden', new_0_5_23_5: 'Self-Update-Neustart korrigiert, damit erfolgreiche Helper-Exits nicht als Fehler gemeldet werden', new_0_5_24_1: 'Bridge-Chat an API-Server-Verarbeitung für multimodale Eingaben, System-Prompt und Workspace-Kontext angepasst', new_0_5_25_1: 'Zurücksetzen und Klonen von Gruppenchat-Räumen hinzugefügt', new_0_5_25_2: 'Web-UI-Statusverzeichnis für eigene Deployment-Layouts konfigurierbar gemacht', new_0_5_25_3: 'MiMo als TTS-Anbieter in den Spracheinstellungen hinzugefügt', new_0_5_25_4: 'Modelllisten eigener Provider werden über das Backend geladen, um Browser-CORS-Fehler zu vermeiden', new_0_5_25_5: 'Tool-Freigabeablauf für Bridge-Sitzungen korrigiert', new_0_5_25_6: 'Erzwungenen CLI-Plattformhinweis aus Bridge-Prompts entfernt, damit eigene Medien-/Dateianweisungen erhalten bleiben', new_0_5_25_7: 'Base64-Bildinhalte werden in der Nachrichtenhistorie korrekt angezeigt', new_0_5_25_8: 'Playwright-Browsertests, Chat-Streaming-Vertragsabdeckung, Provider-Modellabdeckung und Coverage-Baseline hinzugefügt', new_0_5_26_1: 'Windows- und lokale Markdown-Medienpfade in Chatverlauf und gerenderten Nachrichten unterstützt', new_0_5_26_2: 'Leere Assistant-Historie gefiltert und veralteter Komprimierungsstatus bei neuem Lauf gelöscht', new_0_5_26_3: 'Gesperrte Schreibvorgänge für Config- und Profil-Updates hinzugefügt, um Beschädigungen durch paralleles Schreiben zu reduzieren', new_0_5_26_4: 'QQBot- und DingTalk-Kanaleinstellungen hinzugefügt', new_0_5_26_5: 'CLI-Porterkennung portabler gemacht und mobile Terminal-Schublade verbessert', new_0_5_26_6: 'Bridge-Profilumgebungen isoliert und Hermes-Plugin-Erkennung über Python-Umgebungen hinweg korrigiert', new_0_5_26_7: 'Gestoppte Gateway-Zustände mit Web-UI-Diagnosen erklärt und Log-Ladezustand stabil gehalten', new_0_5_26_8: 'Session-Reset-Modi, Custom-Provider-Base-URL und dynamische Zustellziele korrigiert', new_0_5_26_9: 'Lokalen Schalter für Tool-Call-Trace-Anzeige in der Chat-Eingabeleiste hinzugefügt', new_0_5_26_10: 'Hermes-Agent-Paketinstallationen unterstützt, wenn kein Source-Checkout verfügbar ist', new_0_5_26_11: 'xAI-Grok-OAuth-Login für SuperGrok-Abonnenten hinzugefügt und Grok-Modellpresets aktualisiert', new_0_5_26_12: 'Browser-, Chat-Streaming-, Provider-, Gateway-, Config-, Plugin- und Bridge-Testabdeckung erweitert', new_0_5_27_1: 'Sitzungsbezogene Modelleinstellungen für Bridge-Chats hinzugefügt, mit unabhängig gespeichertem Provider und Modell pro Sitzung', new_0_5_27_2: 'Bridge-Sitzung per Rechtsklick über „Modell festlegen“ auf ein anderes Modell umstellen', new_0_5_27_3: 'Läufe prüfen jetzt das Sitzungsmodell und fallen auf das aktuelle Standardmodell zurück, wenn es nicht verfügbar ist', new_0_5_27_4: 'Kontextkomprimierung folgt standardmäßig dem aktuell im Profil ausgewählten Standardmodell', new_0_5_30_1: 'Bridge-Chat bewahrt jetzt strukturierte Historie und behebt sporadisch ausbleibende Antworten sowie übersprungene Tool-Ausführung durch flachgedrückte Tool-Historie', new_0_5_30_2: 'Gruppenchat-Mention-Routing ist zuverlässiger für mehrere Agents, entfernt die eigene @-Mention vor der Zustellung und behält Anzeigenamen nach Aktualisierung bei', new_0_5_30_3: 'Modellseiten, Chat-Modellauswahl und Sitzungsmodellwahl zeigen Provider und Modelle jetzt passend zum aktiven Profil mit korrekten Standardmarkierungen', new_0_5_30_4: 'Gateway-Verwaltung vereinfacht: eigenständige Gateway-Seite entfernt, jedes Profil wird vor Start auf Plattformkonfiguration geprüft, und ein leichter Gateway-Runner verwaltet Starts und Neustarts', new_0_5_30_5: 'Gateway-Start unter Docker, Termux und Windows mit Runtime-Lock-Behandlung, Portkonfliktbereinigung, Hintergrundausführung und Neustartunterstützung verbessert', new_0_5_30_6: 'Windows-Kompatibilität für Pfaderkennung, Dateidownloads und Job-/Update-Subprozesse gehärtet, damit keine Terminalfenster aufblitzen', new_0_5_30_7: 'Config-Schreibvorgänge und Provider-Presets korrigiert: .env-Schlüssel validieren, FUN-Codex über Responses API routen und Z.AI/GLM-Modelllisten aktualisieren', new_0_5_30_8: 'Frontend-Details poliert, darunter eingeklappte Seitenleiste, kurze Gruppenlabels, Seitenleisten-Trenner und Gesprächs-Outline', new_0_5_30_9: 'Kontextkomprimierung folgt nun Profil-Komprimierungseinstellungen und härtet veraltete Snapshots durch Wiederverwendung alter Zusammenfassungen mit sicherem Rest statt erneuter Vollkomprimierung', new_0_5_31_1: 'Bridge-Broker-Neustarts gehärtet, finale Gruppenchat-Stream-Darstellung korrigiert und {\'@\'}all-Routing für Gruppenchats hinzugefügt', new_0_5_31_2: 'Dateimanager kann absolute Pfade kopieren; mobile Session-Schublade liegt nicht mehr hinter Chat-Inhalten', new_0_5_31_3: 'Profilauswahl zeigt jetzt Avatare, eigene Avatar-Uploads, Laufzeitstatus-Dialog sowie Gateway-/Profil-Neustartaktionen', new_0_5_31_4: 'Profilavatare erscheinen jetzt in Einzelchat, Gruppenchat und eingeklappter Seitenleiste, mit Web-UI-Profilmetadaten und Windows-sicheren Pfaden', new_0_5_31_5: 'Docker-, Termux- und Windows-Gateway-Erkennung sowie Neustartprüfungen verbessert, indem gateway_state/gateway.pid für Managed-Gateway-Liveness genutzt wird', new_0_5_31_6: 'APIKEY.FUN-Bildgenerierungs-Medienendpunkt und gebündelter apikey-image-gen-Skill für Text-zu-Bild, Bild-zu-Bild und Bildbearbeitung über den fun-codex-Provider des aktiven Profils hinzugefügt', new_0_5_33_1: 'Ausführungsfehler und Socket-Fehler in Einzel- und Gruppenchats bleiben nun als rote Agent-Nachrichten in der Nachrichtenliste sichtbar', new_0_5_33_2: 'Session-Suche kann auf das ausgewählte Profil begrenzt werden; ohne Auswahl werden weiterhin alle Profile durchsucht', new_0_5_33_3: 'Skills-Seite zeigt chinesische/englische Empfehlungstexte, wenn kein Skill ausgewählt ist; erneuter Klick hebt die Auswahl auf', new_0_5_33_4: 'Ungenutzte changelog-i18n-Einträge entfernt, um die Frontend-Größe zu reduzieren', new_0_5_33_5: 'Agent-Bridge-Startfehler auf chinesischem Windows durch netstat-Ausgabecodierung behoben', new_0_5_33_6: 'Nous-Portal-Modellpreset anhand des öffentlichen Catalogs und der Portal-Empfehlungen aktualisiert', new_0_5_33_7: 'Profillisten und Laufzeitstatus lesen Profilnamen aus Verzeichnissen und Standardmodelle aus config, um CLI-Tabellenspaltenfehler zu vermeiden', new_0_5_34_1: 'Multimodale tool-Ergebnisse werden beim Speichern von Sitzungs-/Gruppenchat-Nachrichten normalisiert, damit keine base64-Bilder in Replays gelangen', new_0_5_34_2: 'Benutzerdefinierte Hermes-Modelle werden über backendverwaltete Konfiguration persistiert, mit neuen Endpunkten zum Hinzufügen und Entfernen', new_0_5_34_3: 'Finale Bridge-Kontextnutzung und Tool-Statusupdates bleiben nach abgeschlossenen Läufen korrekt', new_0_5_34_4: 'Kanban-Filterung, Verantwortlichenanzeige, Kartenaktionen und Aufgabendetails verbessert', new_0_5_34_5: 'Komprimierungs-Nutzungszählung korrigiert, indem fixer prompt/tool-Kontext gecacht und vollständige Kontext-token gemeldet werden', new_0_5_34_6: 'Gruppenchat-Agents cachen ihren eigenen fixen Kontext und zeigen Komprimierungsfortschritt erst an, wenn die Komprimierung wirklich startet', new_0_5_34_7: 'Web-UI-gebündelte Skills werden in jedes Profile synchronisiert und das Ziel-Profile wird pro Injection protokolliert', new_0_5_34_8: 'Wenn Kanban unter Windows fehlschlägt, aktualisieren Sie Hermes, um die neuesten Migration-Fixes für die Kanban-Datenbank zu erhalten', new_0_5_35_1: 'Bridge-Sessions können nun über verschiedene Sessions hinweg parallel laufen, während Läufe derselben Session zur Wahrung der Nachrichtenreihenfolge serialisiert bleiben', new_0_5_35_2: 'Neue Performance-Monitor-Seite für System-CPU/Speicher, Web UI, Bridge Broker, Workers und aktive Sessions', new_0_5_35_3: 'Worker-Ressourcenmetriken zeigen CPU, Speicher, Profile, Session-Anzahl und Laufstatus pro worker', new_0_5_35_4: 'Bridge-worker-Lifecycle-Cleanup verbessert, damit Broker-Shutdowns und beendete Elternprozesse worker zurückfordern und verwaiste Python-Prozesse reduzieren', new_0_5_35_5: 'Monitoring-Kompatibilität mit Fallbacks für Ressourcenmessung unter macOS, Windows, Linux, Docker und Termux gehärtet', new_0_5_35_6: 'Performance Monitoring blockiert nicht mehr auf worker-Anfragen während Agent-Initialisierung und reduziert request timeouts unter Windows', new_0_5_35_7: 'Chat-Markdown unterstützt Inline-Vorschauen für Textinhalte, und Download-Icons laden Dateien direkt herunter statt die Vorschau zu öffnen', new_0_5_35_8: 'Content-Preview-Drawer verbessert: Schließen-Aktion auf Mobilgeräten, mobile Vollbreite, 800px Desktop-Breite und konsistente Text-/Markdown-Hintergründe', }, // Dateien files: { title: 'Dateien', tree: 'Verzeichnisbaum', list: 'Dateiliste', breadcrumbRoot: 'Start', newFile: 'Neue Datei', newFolder: 'Neuer Ordner', upload: 'Hochladen', refresh: 'Aktualisieren', open: 'Offnen', edit: 'Bearbeiten', preview: 'Vorschau', download: 'Herunterladen', copyPath: 'Pfad kopieren', rename: 'Umbenennen', delete: 'Loschen', name: 'Name', size: 'Grosse', modified: 'Geandert', actions: 'Aktionen', emptyDir: 'Leeres Verzeichnis', loading: 'Wird geladen...', confirmDelete: 'Mochten Sie "{name}" wirklich loschen?', confirmDeleteDir: 'Mochten Sie das Verzeichnis "{name}" und seinen gesamten Inhalt wirklich loschen?', deleteFailed: 'Loschen fehlgeschlagen', deleted: 'Geloscht', renameTo: 'Umbenennen in', newFileName: 'Dateiname', newFolderName: 'Ordnername', created: 'Erstellt', createFailed: 'Erstellen fehlgeschlagen', renamed: 'Umbenannt', renameFailed: 'Umbenennen fehlgeschlagen', uploadSuccess: '{count} Datei(en) hochgeladen', uploadFailed: 'Hochladen fehlgeschlagen', saveFailed: 'Speichern fehlgeschlagen', saved: 'Gespeichert', unsavedChanges: 'Sie haben ungespeicherte Anderungen. Verwerfen?', pathCopied: 'Pfad kopiert', fileTooLarge: 'Datei zu gross (max. 10 MB)', permissionDenied: 'Geschutzte Datei kann nicht geandert werden', notFound: 'Datei oder Verzeichnis nicht gefunden', backendError: 'Dateioperation fehlgeschlagen', dragDropHint: 'Dateien hierher ziehen, um sie hochzuladen', closeEditor: 'Editor schliessen', closePreview: 'Schliessen', saveFile: 'Speichern', fileTree: 'Dateibaum', }, // Gruppenchat groupChat: { title: 'Gruppenchat', createRoom: 'Raum erstellen', joinByCode: 'Mit Code beitreten', roomName: 'Raumname', roomNamePlaceholder: 'Raumnamen eingeben', inviteCode: 'Einladungscode', autoGenerate: 'Automatisch generieren', noRooms: 'Noch keine Raume', selectOrCreate: 'Wahlen oder erstellen Sie einen Raum, um zu chatten', agents: 'Agenten', addAgent: 'Agent hinzufugen', selectProfile: 'Wahlen Sie ein Profil', agentAdded: 'Agent hinzugefugt', agentAlreadyInRoom: 'Agent ist bereits in diesem Raum', agentAddFailedCount: '{count} Agent(en) wurden nicht hinzugefugt: {details}', noAgents: 'Keine Agenten in diesem Raum', members: 'Mitglieder', roomCreated: 'Raum erstellt', roomDeleted: 'Raum gelöscht', roomCloned: 'Raum geklont', cloneRoom: 'Raum klonen', deleteRoomConfirm: 'Diesen Raum löschen?', clearContext: 'Kontext löschen', clearContextConfirm: 'Diesen Raumkontext löschen? Nachrichten und Komprimierungs-Snapshots werden entfernt, Agenten und Mitglieder bleiben.', contextCleared: 'Kontext gelöscht', you: 'Du', joined: 'Raum beigetreten', joinFailed: 'Beitreten fehlgeschlagen', inputPlaceholder: 'Nachricht eingeben... (Enter zum Senden)', enterCode: 'Einladungscode eingeben', yourName: 'Dein Name', yourNamePlaceholder: 'Gib deinen Anzeigenamen ein', yourDescription: 'Beschreibung (optional)', yourDescriptionPlaceholder: 'Erzahl anderen wer du bist...', agentName: 'Agent-Name', agentNamePlaceholder: 'Benutzerdefinierter Name (leer = Profilname)', agentDesc: 'Agent-Beschreibung', agentDescPlaceholder: 'Beschreiben Sie, was dieser Agent tut...', agentReplying: 'antwortet...', agentCompressing: 'komprimiert Kontext...', compressionSettings: 'Komprimierungseinstellungen', triggerTokens: 'Trigger-Token', triggerTokensDesc: 'Token-Schwelle für Kontextkomprimierung', maxHistoryTokens: 'Max. Verlaufs-Token', maxHistoryTokensDesc: 'Maximale Token für komprimierten Kontext', tailMessageCount: 'Nachrichten am Ende', tailMessageCountDesc: 'Anzahl der letzten Nachrichten, die unverändert bleiben', compressionConfig: 'Komprimierungskonfig', compressNow: 'Jetzt komprimieren', compressingInProgress: 'Komprimierung läuft, bitte warten', compressionSaved: 'Konfiguration gespeichert', }, // Download download: { downloading: 'Wird heruntergeladen...', downloadFailed: 'Download fehlgeschlagen', fileNotFound: 'Datei nicht gefunden oder geloscht', fileTooLarge: 'Datei zu gross (Limit uberschritten)', backendError: 'Lesen der Datei fehlgeschlagen, Remote-Umgebung moglicherweise nicht verfugbar', backendTimeout: 'Zeituberschreitung beim Lesen der Datei', unsupportedBackend: 'Aktuelles Terminal-Backend unterstutzt keine Datei-Downloads', invalidPath: 'Ungultiger Dateipfad', contentDisplay: 'Inhalt anzeigen', download: 'Herunterladen', downloadFile: 'Datei herunterladen', }, gateways: { title: 'Gateways', running: 'Läuft', stopped: 'Gestoppt', started: 'Gestartet', startFailed: 'Gateway konnte nicht gestartet werden', stopFailed: 'Gateway konnte nicht gestoppt werden', }, kanban: { title: 'Kanban-Board', createTask: 'Neue Aufgabe', noTasks: 'Keine Aufgaben', allStatuses: 'Alle Status', allAssignees: 'Alle Verantwortlichen', columns: { triage: 'Sichtung', todo: 'Zu erledigen', ready: 'Bereit', running: 'In Arbeit', blocked: 'Blockiert', done: 'Erledigt', archived: 'Archiviert', }, card: { assigneeTooltip: 'Verantwortlicher', priority: { low: 'Niedrig', medium: 'Mittel', high: 'Hoch', }, timeAgo: { justNow: 'gerade eben', minutes: 'vor {count} Min.', hours: 'vor {count} Std.', days: 'vor {count} Tg.', }, }, board: { create: 'Neues Board', archive: 'Board archivieren', archiveConfirm: 'Aktuelles Board archivieren?', archived: 'Board archiviert', created: 'Board erstellt', slugPlaceholder: 'Board-Kennung, z. B. project-a', namePlaceholder: 'Anzeigename (optional)', slugRequired: 'Board-Kennung ist erforderlich', }, form: { title: 'Titel', titlePlaceholder: 'Aufgabentitel', titleRequired: 'Titel ist erforderlich', body: 'Beschreibung', bodyPlaceholder: 'Aufgabenbeschreibung (optional)', assignee: 'Verantwortlicher', selectAssignee: 'Verantwortlichen wählen...', priority: 'Priorität', selectPriority: 'Priorität wählen...', }, detail: { status: 'Status', priority: 'Priorität', assignee: 'Verantwortlicher', tenant: 'Mandant', createdAt: 'Erstellt', startedAt: 'Gestartet', completedAt: 'Abgeschlossen', comments: 'Kommentare', events: 'Ereignisse', runs: 'Ausführungen', artifacts: 'Artefakte', result: 'Ergebnis', highlights: 'Highlights', sources: 'Datenquellen', sessions: 'Zugehörige Sitzungen', sessionMessages: 'Sitzungsnachrichten', noSessions: 'Keine zugehörigen Sitzungen gefunden.', }, action: { title: 'Aktionen', assign: 'Zuweisen', assignTo: 'Zuweisen an...', block: 'Blockieren', blockReason: 'Blockierungsgrund', unblock: 'Blockierung aufheben', complete: 'Abschließen', completeSummary: 'Abschlusszusammenfassung (optional)', }, message: { loadFailed: 'Aufgabe konnte nicht geladen werden', taskCreated: 'Aufgabe erstellt', taskAssigned: 'Aufgabe zugewiesen', taskBlocked: 'Aufgabe blockiert', taskUnblocked: 'Blockierung aufgehoben', taskCompleted: 'Aufgabe abgeschlossen', }, stats: { total: 'Gesamt', tasks: 'Aufgaben', }, }, }