feat: add German (de) locale support

This commit is contained in:
Nicolas Varrot
2026-02-14 17:24:01 +00:00
parent aca5ea8ce9
commit bc7fc08a5c

View File

@@ -475,7 +475,157 @@ const es: Record<keyof typeof en, string> = {
export type TranslationKey = keyof typeof en;
const messages: Record<string, Record<string, string>> = { en, fr, es };
const de: Record<keyof typeof en, string> = {
'login.title': 'PinchChat',
'login.subtitle': 'Mit deinem OpenClaw-Gateway verbinden',
'login.gatewayUrl': 'Gateway-URL',
'login.token': 'Token',
'login.tokenPlaceholder': 'Gateway-Token eingeben',
'login.connect': 'Verbinden',
'login.connecting': 'Verbinde…',
'login.showToken': 'Token anzeigen',
'login.hideToken': 'Token verbergen',
'login.storedLocally': 'Zugangsdaten werden lokal in deinem Browser gespeichert',
'login.wsHint': 'URL muss mit ws:// oder wss:// beginnen',
'header.title': 'PinchChat',
'header.connected': 'Verbunden',
'header.disconnected': 'Getrennt',
'header.logout': 'Abmelden',
'header.toggleSidebar': 'Seitenleiste ein-/ausblenden',
'header.changeLanguage': 'Sprache ändern',
'header.soundOn': 'Benachrichtigungston aktivieren',
'header.soundOff': 'Benachrichtigungston deaktivieren',
'chat.welcome': 'PinchChat',
'chat.welcomeSub': 'Sende eine Nachricht, um zu beginnen',
'chat.suggestions': 'Probiere z.\u00a0B. …',
'chat.suggestion1': 'Fasse meine letzten E-Mails zusammen',
'chat.suggestion2': 'Was steht heute in meinem Kalender?',
'chat.suggestion3': 'Suche im Web nach aktuellen Nachrichten',
'chat.suggestion4': 'Hilf mir, ein Skript zu schreiben',
'chat.loadingHistory': 'Nachrichten werden geladen…',
'chat.inputPlaceholder': 'Nachricht eingeben…',
'chat.inputLabel': 'Nachricht',
'chat.attachFile': 'Datei anhängen',
'chat.send': 'Senden',
'chat.stop': 'Stoppen',
'chat.showPreview': 'Markdown-Vorschau',
'chat.hidePreview': 'Vorschau ausblenden',
'chat.scrollToBottom': 'Neue Nachrichten',
'chat.scrollDown': 'Nach unten scrollen',
'chat.collapseTools': 'Alle Tools einklappen',
'chat.expandTools': 'Alle Tools ausklappen',
'chat.messages': 'Chat-Nachrichten',
'chat.thinking': 'Denkt nach…',
'sidebar.title': 'Sitzungen',
'sidebar.empty': 'Keine Sitzungen',
'sidebar.search': 'Sitzungen suchen…',
'sidebar.noResults': 'Keine Treffer',
'sidebar.pin': 'Sitzung anheften',
'sidebar.unpin': 'Sitzung lösen',
'sidebar.pinned': 'Angeheftet',
'sidebar.delete': 'Sitzung löschen',
'sidebar.deleteConfirm': 'Diese Sitzung löschen? Dies kann nicht rückgängig gemacht werden.',
'sidebar.deleteCancel': 'Abbrechen',
'sidebar.openSplit': 'In geteilter Ansicht öffnen',
'sidebar.close': 'Seitenleiste schließen',
'sidebar.clearSearch': 'Suche leeren',
'sidebar.filterAll': 'Alle',
'sidebar.filterActive': 'Aktive',
'split.close': 'Geteilte Ansicht schließen',
'app.mainChat': 'Haupt-Chat',
'app.splitPane': 'Geteiltes Fenster',
'app.skipToChat': 'Zum Eingabefeld springen',
'thinking.label': 'Nachdenken',
'thinking.reasoning': 'Denkt nach…',
'tool.parameters': 'Parameter',
'tool.result': 'Ergebnis',
'connection.reconnecting': 'Verbindung verloren — wird wiederhergestellt…',
'connection.reconnected': 'Wieder verbunden!',
'message.copy': 'Nachricht kopieren',
'message.copied': 'Kopiert!',
'message.retry': 'Nachricht erneut senden',
'message.metadata': 'Nachrichtendetails',
'message.rawJson': 'Roh-JSON',
'message.hideRawJson': 'Roh-JSON ausblenden',
'time.yesterday': 'Gestern',
'time.today': 'Heute',
'shortcuts.title': 'Tastenkürzel',
'shortcuts.send': 'Nachricht senden',
'shortcuts.newline': 'Neue Zeile',
'shortcuts.search': 'Sitzungen suchen',
'shortcuts.switchSession': 'Vorherige / nächste Sitzung',
'shortcuts.closeSidebar': 'Seitenleiste / Suche schließen',
'shortcuts.stop': 'Generierung stoppen',
'shortcuts.help': 'Tastenkürzel anzeigen',
'shortcuts.close': 'Schließen',
'shortcuts.chatSection': 'Chat',
'error.title': 'Etwas ist schiefgelaufen',
'error.description': 'Beim Rendern der Oberfläche ist ein unerwarteter Fehler aufgetreten. Du kannst es erneut versuchen oder die Seite neu laden.',
'error.retry': 'Erneut versuchen',
'error.reload': 'Seite neu laden',
'shortcuts.navigationSection': 'Navigation',
'shortcuts.generalSection': 'Allgemein',
'header.export': 'Unterhaltung als Markdown exportieren',
'header.compact': 'Kompaktieren',
'header.compacting': 'Kompaktiere…',
'header.sessionInfo': 'Sitzungsinfo',
'sessionInfo.sessionKey': 'Sitzungsschlüssel',
'sessionInfo.channel': 'Kanal',
'sessionInfo.kind': 'Typ',
'sessionInfo.model': 'Modell',
'sessionInfo.agent': 'Agent',
'sessionInfo.messages': 'Nachrichten',
'sessionInfo.totalTokens': 'Tokens gesamt',
'sessionInfo.inputTokens': 'Eingabe',
'sessionInfo.outputTokens': 'Ausgabe',
'sessionInfo.contextWindow': 'Kontext',
'sessionInfo.lastActive': 'Letzte Aktivität',
'theme.title': 'Design',
'theme.mode': 'Modus',
'theme.accent': 'Akzent',
'theme.system': 'System',
'theme.dark': 'Dunkel',
'theme.light': 'Hell',
'theme.oled': 'OLED',
'search.placeholder': 'In Nachrichten suchen…',
'search.noResults': '0 Ergebnisse',
'search.prev': 'Vorheriger Treffer',
'search.next': 'Nächster Treffer',
'shortcuts.searchMessages': 'In Nachrichten suchen',
'settings.sendShortcut': 'Senden mit',
'settings.sendEnter': 'Enter',
'settings.sendCtrlEnter': 'Strg+Enter',
'message.bookmark': 'Nachricht markieren',
'message.removeBookmark': 'Lesezeichen entfernen',
'chat.bookmarks': 'Lesezeichen',
'chat.export': 'Unterhaltung exportieren',
'chat.contextCompacted': 'Kontext kompaktiert — ältere Nachrichten lokal zwischengespeichert',
'slash.commands': 'Befehle',
'slash.status': 'Sitzungsstatus und Nutzung anzeigen',
'slash.reasoning': 'Reasoning-Modus umschalten',
'slash.verbose': 'Ausführliche Ausgabe umschalten',
'slash.model': 'Modell für diese Sitzung wechseln',
'slash.compact': 'Gesprächskontext kompaktieren',
'slash.reset': 'Sitzung zurücksetzen',
'slash.help': 'Verfügbare Befehle anzeigen',
};
const messages: Record<string, Record<string, string>> = { en, fr, es, de };
export const supportedLocales = Object.keys(messages) as string[];
@@ -484,6 +634,7 @@ export const localeLabels: Record<string, string> = {
en: 'EN',
fr: 'FR',
es: 'ES',
de: 'DE',
};
function resolveInitialLocale(): string {