Files
Hermes-ui/packages/client/src/i18n/locales/de.ts
T

1260 lines
54 KiB
TypeScript
Raw Normal View History

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