Files
Hermes-ui/packages/client/src/i18n/locales/de.ts
T
ZhangKai | 张凯 87a8e95d66 feat: add MiMo TTS provider 语音TTS提供接入MiMo (#752)
* feat: add MiMo TTS provider with preset voices, voice design and voice clone

* refactor: remove MiMo voice clone feature
2026-05-16 08:55:23 +08:00

1079 lines
47 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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',
skillsUsage: 'Skill-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 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',
},
// 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)',
slashCommandArgs: {
message: '<Nachricht>',
title: '<Titel>',
text: '<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',
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',
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: '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.',
clearVisibleModels: 'Auswahl löschen',
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}',
// 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',
},
},
// 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',
},
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_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_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_18_1: 'Add Skills Usage monitoring page with daily trend chart and top skills statistics',
new_0_5_18_2: 'Add CLI chat session bridge with Python agent bridge for WebSocket-based sessions',
new_0_5_18_3: 'Add Ollama Cloud provider preset with dynamic model catalog',
new_0_5_18_4: 'Support model display name renaming (aliases)',
new_0_5_18_5: 'Support model visibility management in Web UI',
new_0_5_18_6: 'Enhance usage analytics dashboard',
new_0_5_18_7: 'Docker single-container deployment with docker-compose and gateway startup fixes',
new_0_5_18_8: 'Fix plugins page HERMES_HOME fallback warning for non-default profiles',
new_0_5_18_9: 'Fix gateway stability across dev restarts and improve Windows compatibility',
new_0_5_22_1: 'Fix Hermes session list API reading the Web UI local session store instead of the Hermes profile database',
new_0_5_23_1: 'Add bridge-only chat slash commands with localized command suggestions',
new_0_5_23_2: 'Persist command history for session replay without polluting model context, usage, or compression',
new_0_5_23_3: 'Isolate gateway profile environment variables to prevent credentials leaking across profiles',
new_0_5_23_4: 'Reserve the Web UI port during gateway allocation to avoid startup conflicts',
new_0_5_23_5: 'Fix self-update restart handling so successful helper exits are not reported as failures',
new_0_5_24_1: 'Align Bridge chat with API Server handling for multimodal input, system prompt, and workspace context',
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',
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',
download: 'Herunterladen',
downloadFile: 'Datei herunterladen',
},
}