87a8e95d66
* feat: add MiMo TTS provider with preset voices, voice design and voice clone * refactor: remove MiMo voice clone feature
1079 lines
47 KiB
TypeScript
1079 lines
47 KiB
TypeScript
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',
|
||
},
|
||
}
|