diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts index bbb5597..9319b97 100644 --- a/src/lib/i18n.ts +++ b/src/lib/i18n.ts @@ -475,7 +475,157 @@ const es: Record = { export type TranslationKey = keyof typeof en; -const messages: Record> = { en, fr, es }; +const de: Record = { + '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> = { en, fr, es, de }; export const supportedLocales = Object.keys(messages) as string[]; @@ -484,6 +634,7 @@ export const localeLabels: Record = { en: 'EN', fr: 'FR', es: 'ES', + de: 'DE', }; function resolveInitialLocale(): string {