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', }, // 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', channels: 'Kanale', terminal: 'Terminal', files: 'Dateien', groupChat: 'Gruppenchat', groupConversation: 'Konversation', 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 abgeschlossen, bitte Server neu starten', 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', }, // Drawer drawer: { terminal: 'Terminal', 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', inputPlaceholder: 'Nachricht eingeben... (Enter zum Senden, Shift+Enter fur neue Zeile)', attachFiles: 'Dateien anhangen', messageQueue: 'Nachrichtenwarteschlange', removeQueuedMessage: 'Nachricht aus Warteschlange entfernen', stop: 'Stopp', send: 'Senden', contextUsed: 'Kontext verwendet:', sessions: 'Sitzungen', webUiSessions: 'Sitzungen', 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, nach Quelle gruppiert.', noSessions: 'Keine Sitzungen', newChat: 'Neuer Chat', 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: 'Chat', liveMode: 'Live', 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: 'Execution time', 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: 'Pause', resumeSpeech: 'Fortsetzen', stopSpeech: 'Stoppen', speechNotSupported: 'Sprachwiedergabe in diesem Browser nicht unterstützt', }, // 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: 'Prompt', 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 root', python: 'Python', scanCwd: 'Scan cwd', 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 Login', 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.', 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', }, // 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.', }, // 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', 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', }, session: { mode: 'Zurucksetzungsmodus', modeHint: 'Ausloser fur Sitzungszurucksetzung', modeBoth: 'Inaktivitat + Geplant', modeIdle: 'Nur Inaktivitat', modeHourly: 'Nur Geplant', 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}', }, 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', }, }, // 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...', }, // 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 Read', cacheWrite: 'Cache Write', sessions: 'Sitzungen', cost: 'Kosten', noData: 'Keine Nutzungsdaten', }, // Anderungsprotokoll changelog: { new_0_5_6_1: 'Sprachwiedergabe mit Web Speech API: manuelle Taste, Auto-Play-Schalter, Regenbogen-Randanimation und Mobile-Optimierung', new_0_5_6_2: 'Robuster LLM-JSON-Parser mit Toleranz für Python-Format und Textextraktion aus Streaming-Events', new_0_5_6_3: 'Skills-Verbesserungen: Nutzungsstatistiken, Quellfilterung, archivierte Skills, Herkunft und Pin-Toggle', new_0_5_6_4: 'Erweiterte tägliche Nutzungsstatistiken mit detaillierter Token-Aufschlüsselung inkl. Cache-Lese-/Schreibtrennung', new_0_5_6_5: 'Sitzungshistorium-Umfang geklärt mit verbesserten Beschreibungen in Chat- und Historienansichten', new_0_5_6_6: 'Attachment-Verarbeitung neu gestaltet mit Anthropic-Stil ContentBlock-Array-Format (Text, Bild, Datei)', new_0_5_6_7: 'Frontend-Dateidownload-Funktion für ContentBlock- und Markdown-Formate mit Authentifizierung hinzugefügt', new_0_5_6_8: 'Multi-Prozess-Konflikt behoben, der SQLite-Database-Resets verursacht hat, durch Entfernen redundanter nodemon-Instanzen', new_0_5_9_1: 'Profilverwaltung在整个应用程序中统一,mit konsistentem API und State-Management', new_0_5_14_1: 'Add session export with full and compressed modes (JSON or plain text)', new_0_5_14_2: 'Fix terminal PTY resource exhaustion, switch to lazy connect', new_0_5_14_3: 'Fix WSL2 health check failure caused by IPv6 dual-stack binding', new_0_5_14_4: 'Fix SQLite connection not released on shutdown causing database lock', new_0_5_14_5: 'Update FUN provider models, add builtin badge and API relay link', new_0_5_15_1: 'Kanban-Board für visuelle Aufgaben- und Sitzungsverwaltung hinzugefügt', new_0_5_15_2: 'Offizielle Landing Page und Dokumentations-Website hinzugefügt', new_0_5_15_3: 'Group-Chat-Agent-Client verwendet dynamischen Port statt fest codiert 8648', new_0_5_15_4: 'node-edge-tts Sprachmodul hinzugefügt', new_0_5_15_5: 'WSL-Standard-Listen-Host-Binding korrigiert', new_0_5_15_6: 'Website-Startseiten-Metadaten für SEO hinzugefügt', new_0_5_15_7: 'IP-basierten Schutz vor Login-Brute-Force-Angriffen hinzugefügt', new_0_5_15_8: 'Doppelte Download-URL-Verpackung im MarkdownRenderer korrigiert', new_0_5_15_9: 'Hermes Markdown-Medien-Rendering und Sync-Wiederholung korrigiert', new_0_5_15_10: 'Upstream-Umgebungsvariablenabhängigkeit entfernt', new_0_5_15_11: 'Wenn die Kanban-Funktion nicht verfügbar ist, updaten Sie bitte hermes-agent', new_0_5_16_1: 'Chat-Streaming von /v1/runs auf /v1/responses API migriert für geringere Latenz', new_0_5_16_2: 'Echte API-Nutzung (Tokens, Cache, Reasoning) in Nutzungsstatistik-Tabelle speichern', new_0_5_16_3: 'QQ-Gruppen-QR-Code zur Website-Navigationsleiste hinzugefügt', new_0_5_16_4: 'Unbenutztes codex_reasoning_items-Feld aus dem Nachrichtenschema entfernt', new_0_5_17_1: 'Vollständige Windows-Kompatibilität: Pfadverarbeitung, Prozessverwaltung, Terminal, Log-Parsing', new_0_5_17_2: 'Gateway-Prozessverwaltung refaktoriert mit plattformübergreifendem Start/Stop/Health-Check', new_0_5_17_3: 'Plugin-Erkennung auf Termux repariert durch Parsen des Hermes-Shebangs zur Python-Lokalisierung', new_0_5_17_4: 'Doppelte YAML-Schluessel in der Config-Parsing tolerieren', new_0_5_17_5: 'Auth-Sperrfenster und Dev-Shutdown-Ablauf verbessert', new_0_5_17_6: 'Comic-Theme: Handschriften-Fonts für Chinesisch (ZCOOL KuaiLe), Japanisch (Zen Maru Gothic), Koreanisch (Gaegu) hinzugefügt', new_0_5_17_7: 'Comic/Doodle-Themenstil hinzugefuegt', new_0_5_17_8: 'Lizenz auf BSL-1.1 geaendert', new_0_5_17_9: 'Schreibgeschuetzte Hermes-Plugins-Seite hinzugefuegt', new_0_5_17_10: 'Bild-Uploads in Base64-Multimodalformat konvertieren', new_0_5_17_11: 'Kanban-Board-Auswahl und Isolierung korrigiert', new_0_5_17_12: 'Sprachwiedergabeeinstellungen mit TTS-Unterstützung für 4 Anbieter hinzugefügt', new_0_5_17_13: 'Schwellenwert fuer Kontextkomprimierung von 200 auf 150 Nachrichten gesenkt', new_0_5_17_14: 'Web-UI-Selbstupdate-Neustartlogik korrigiert', new_0_5_17_15: 'Gemeinsame Umgebungsvariable opencode-zen und opencode-go korrigiert, die Konfigurationskopplung verursachte', new_0_5_17_16: 'Unterstützung für Traditionelles Chinesisch (zh-TW) hinzugefügt', new_0_5_17_17: 'Sichtbare Modelle in der Web-UI verwalten', new_0_5_17_18: 'Kanban: Vollständige Aktionskette für Aufgaben (Kommentare, Logs, Zuweisung, Versand) mit Fähigkeitsgrenzen', new_0_5_17_19: 'Provider-Auth-Einträge werden beim Löschen nicht mehr gelöscht – korrigiert', new_0_5_17_20: 'Codex credential-pool Auth-Erkennung korrigiert', new_0_5_17_21: 'Edge TTS Geschwindigkeits-/Tonhoehen-Slider zu den Spracheinstellungen hinzugefuegt', new_0_5_17_22: 'Doppelte YAML-Schluessel in der Config verursachen keinen Parsing-Absturz mehr', new_0_5_17_23: 'Gateway-Port-Eigentum basiert jetzt auf PID-Datei und verhindert profiluebergreifende Port-Entfuehrung', new_0_5_17_24: 'Verlaufsseite zeigt jetzt Cron-Sitzungsaufzeichnungen an', new_0_5_17_25: 'Sprachwechsel- und Themen-Symbole in eingeklappter Seitenleiste nicht mehr gequetscht', new_0_5_13_1: 'Nachrichtenwarteschlange für sequenzielle Run-Verarbeitung hinzugefügt, um gleichzeitige Konflikte zu vermeiden', new_0_5_13_2: 'Zwei-Ebenen-Skills-Verzeichnisstruktur mit Sonstige-Kategorie für flache Skills unterstützt', new_0_5_13_3: 'Temporäre Sitzungen (eph_*) beim Start-Sync filtern, um interne Sitzungen nicht zu importieren', new_0_5_13_4: 'Termux/proot-Umgebungskompatibilität für mobile und eingebettete Bereitstellungen hinzugefügt', new_0_5_13_5: 'Chat-Run-Abbruch-Lebenszyklus: ordnungsgemäße Bereinigung bei Benutzerabbruch', new_0_5_13_6: 'Streaming-Indikator aus Verlaufs-Nachrichtenliste für sauberere Anzeige entfernt', new_0_5_13_7: 'Kontextauflösung für benutzerdefinierte Provider mit verbesserter Modellzuordnung korrigiert', new_0_5_13_8: 'IPv6-Standard-Listen-Adresse für korrekte Adressbindung korrigiert', new_0_5_13_9: 'Chat-Nachrichtenanzeige und Kontextkomprimierungslogik verbessert', new_0_5_13_10: 'Chat-Abschluss-Sound-Toggle und leere Cron-Stilllauf-Historie korrigiert', new_0_5_12_1: 'Batch-Session-Löschung: Checkbox-Mehrfachauswahl, Alle auswählen und Batch-Delete für verbessertes Session-Management', new_0_5_12_2: 'Visueller Context-Length-Editor: Token-Anzahl anklicken für Edit-Popup mit benutzerdefiniertem Limit', new_0_5_12_3: 'Fix mention Tastaturauswahl: Custom Dropdown statt NDropdown mit Tastaturnavigation und Scroll-Folge', new_0_5_12_4: 'Chat-Abschluss-Sound: Auto-Play-Toggle für bessere UX', new_0_5_12_5: 'Verbesserte Chat-Nachrichtenanzeige: Filter leere Assistant-Nachrichten und bessere Logik', new_0_5_12_6: 'Verbesserter Update-Mechanismus: npm prefix -g für dynamische Pfad-Auflösung (Homebrew-Unterstützung)', new_0_5_10_1: 'Automatisierung von Docker-Image-Builds bei GitHub-Release mit versionierten Tags (z.B. :v0.5.10)', new_0_5_10_2: 'Sitzungsautorisierungsmodus-Konfiguration hinzufügen: approvals.mode (aus/manuell)', new_0_5_10_3: 'Automatische OpenAPI-Dokumentationserstellung hinzufügen (94 Endpunkte, 24 Tags)', new_0_5_10_4: 'Media-Rendering verbessern: Unterstützung für Bilder, Videos und Dateien in Markdown', new_0_5_10_5: 'Gruppenchat-Prompts optimieren und Media-Handling korrigieren', new_0_5_9_2: 'GitHub-Issue- und Pull-Request-Vorlagen für besseren Contribution-Workflow hinzugefügt', new_0_5_8_1: 'Drawer-Panel mit Mobile-Sidebar-Support und anpassbarem Rainbow-Button hinzugefügt', new_0_5_8_2: 'Profile-Switching-State-Sync-Problem behoben mit sofortiger UI-Aktualisierung und Backend-Verifizierung', new_0_5_8_3: 'Sonderzeichen und Emoji in der Sprachwiedergabe gefiltert für bessere Text-to-Speech', new_0_5_8_4: 'Fehlende i18n-Schlüssel hinzugefügt und Sitzungsdatenquelle vereinheitlicht (Datenbank-Priorität)', new_0_5_8_5: 'Vite-Build-Konfiguration für schnellere Docker-Builds mit esbuild und Chunk-Splitting optimiert', new_0_5_7_1: 'Kontextkomprimierung für rich content (Bilder, Dateien) optimiert, verbesserte Verarbeitung von Tool-Nachrichten', new_0_5_7_2: 'Synchronisation von Sitzungen verbessert mit Batch-Inserts und Transaktionsschutz für Datenkonsistenz', new_0_5_7_3: 'Empfang von usage.updated-Ereignissen behoben, um genaues Token-Tracking über Läufe hinweg zu gewährleisten', new_0_5_5_1: '🎉 Tag der Arbeit! Heute wird nicht gearbeitet, bitte habt Verständnis', new_0_5_5_2: 'Verlaufsseite für Hermes-Sitzungshistorie hinzugefügt', new_0_5_5_3: 'Verlaufsseite verwaltet Sitzungen unabhängig ohne Störung des aktiven Chats', new_0_5_5_4: 'Verlaufsseite lädt automatisch erste CLI-Sitzung', new_0_5_5_5: 'HistoryMessageList-Komponente mit Session-Prop-Injection', new_0_5_5_6: 'Leere Nachrichten und Tool-Nachrichten ohne toolName gefiltert', new_0_5_5_7: 'LocalStorage-Sitzungscache entfernt, Daten direkt vom Backend', new_0_5_5_8: 'Profile-Umschaltung optimiert, veraltete Cache-Aufrufe entfernt', new_0_5_4_2: 'Fix concurrent chat sessions event cross-talk with WebSocket event routing refactoring', new_0_5_4_3: 'Fix cron job edit payloads with partial PATCH to support long prompt name-only edits', new_0_5_4_4: 'Fix web terminal Hermes CLI availability after Docker deployment', new_0_5_4_5: 'Add workspace dialog i18n translations for title and improve session persistence', new_0_5_4_6: 'Support code block copy feedback with user notifications', new_0_5_4_7: 'Align usage analytics with Hermes state DB schema', new_0_4_8_2: 'Fix nested markdown fence rendering truncation', new_0_4_8_3: 'Fix compressed session lineage projection and search', new_0_4_8_4: 'Optimize session list N+1 queries and fix search 500 on non-CJK input', new_0_4_8_5: 'Fix forced scroll to bottom when switching back from other tabs', new_0_4_8_6: 'Smooth session switch with loading transition overlay', new_0_4_8_7: 'Fix login token validation using Hermes session endpoint', new_0_4_8_8: 'Fix image attachments broken after page refresh (blob URL persistence)', new_0_4_8_9: 'Click image attachments to preview in fullscreen overlay', new_0_4_8_10: 'Move upload directory from temp to ~/.hermes-web-ui/upload', new_0_4_7_1: 'Echtzeit-Streaming-Anzeige von Denk-/Argumentationsblocken', new_0_4_7_2: 'Prepare-Skript wahrend Docker-Build uberspringen', new_0_4_7_3: 'Gruppenchat-Mobile-UX-Verbesserungen und UI-Aufpolierung', new_0_4_7_4: 'Verbleibende Kontext-Token auf 0 statt auf negativ begrenzen', new_0_4_7_5: 'Alibaba Coding Plan integrierter Provider mit .env base_url-Uberschreibung hinzugefugt', new_0_4_7_6: 'Remote-Profile beim Start uberspringen, um Hanger zu vermeiden', new_0_4_7_7: 'Stillschweigend verschluckte Laufzeitfehler erkennen und anzeigen', new_0_4_7_8: 'Provider-bewusste Kontextlangen-Abfrage', new_0_4_7_9: 'config.model beim Wechsel zurucksetzen und CLI-Custom-Provider auflosen', new_0_4_7_10: 'base_url_env aus .env beim Loschen des integrierten Providers entfernen', new_0_4_7_11: 'Gruppenchat-Raum-Seitenleistenhintergrund an die Sitzungsliste anpassen', new_0_4_5_1: 'Add group chat with multi-agent rooms, mention routing, and typing status recovery', new_0_4_5_2: 'Rewrite model-context config to use YAML with context_length setting', new_0_4_5_3: 'Add gpt-5.5 to OpenAI Codex model list', new_0_4_5_4: 'Replace jobs proxy with local controller and optimize model loading', new_0_4_5_5: 'Add i18n support for custom model feature in ModelSelector', new_0_4_5_6: 'Fix sidebar i18n missing key warnings', new_0_4_5_7: 'Clear all localStorage on logout', new_0_4_5_8: 'Add periodic log rotation to prevent unbounded log growth', new_0_4_2_1: 'Token-Nutzungsverfolgung und dynamische Kontextlange hinzugefugt', new_0_4_2_2: 'Sitzungssuche-Modal hinzugefugt', new_0_4_2_3: 'Gruppenchat-System mit Socket.IO und SQLite wiederhergestellt', new_0_4_2_4: 'Angeheftete Sitzungen und Live-Monitor hinzugefugt', new_0_4_2_5: 'Eingebaute Provider-Erkennung und Modellabgleich behoben', }, // 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', }, // 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', noAgents: 'Keine Agenten in diesem Raum', members: 'Mitglieder', roomCreated: 'Raum erstellt', roomDeleted: 'Raum gelöscht', deleteRoomConfirm: 'Diesen Raum löschen?', 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', download: 'Herunterladen', downloadFile: 'Datei herunterladen', }, }