i18n: Englisch als Hauptsprache, Sprachpakete fuer Desktop und WebUI (#661)
Umbau durch Gemini Flash, Durchsicht und Nacharbeit durch Claude. Umfang: - Desktop: LocalizationManager (JSON-Pakete, Rueckfall auf Englisch, Umschalten zur Laufzeit), Localize-Markup-Erweiterung, Sprachwahl in den Einstellungen (AppSettings.Language, Vorgabe "en"); 317 Schluessel je Sprache - WebUI: alle Ansichten auf t()/data-i18n, 656 Schluessel je Sprache - Agenten-Werkzeuge: Beschreibungen, Schemata und Meldungen auf Englisch - Tests an die englischen Meldungen angepasst, keine Pruefung abgeschwaecht Nacharbeit bei der Durchsicht: - ~25 Kommentarbloecke mit Begruendungen waren ersatzlos entfallen, darunter sicherheitsrelevante (NTFS-Datenstrom beim shared:-Praefix, Bremse gegen Agentenschleifen, doppelter POST beim Anlegen einer Instanz). Wieder eingesetzt: auf Englisch, wo die Datei umgestellt ist, sonst im Wortlaut. - Drei WebUI-Schluessel fehlten (logs.paused, instances.instanceOfflineError, instances.noInstanceActiveError). Weil t() bei fehlendem Schluessel den Schluessel selbst liefert, griff der "|| err.message"-Rueckfall nie — die Oberflaeche haette den Schluesselnamen angezeigt. Geprueft: Schluesselgleichheit en/de, Platzhalter je Schluessel, jeder im Code benutzte Schluessel vorhanden, node --check fuer alle Module, 1.220 Tests gruen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
69718122f3
commit
ad71682c2d
@@ -0,0 +1,339 @@
|
||||
{
|
||||
"desktop.mainWindow.title": "ClawdDotNet",
|
||||
"desktop.mainWindow.sidebarTooltip": "Seitenleiste ein-/ausklappen",
|
||||
"desktop.mainWindow.switchInstance": "Instanz wechseln",
|
||||
"desktop.mainWindow.instance": "INSTANZ",
|
||||
"desktop.mainWindow.themeLight": "Hellmodus",
|
||||
"desktop.mainWindow.themeDark": "Dunkelmodus",
|
||||
"desktop.mainWindow.themeToggle": "Farbschema umschalten",
|
||||
"desktop.mainWindow.openInstanceFolder": "Instanz-Ordner öffnen",
|
||||
"desktop.mainWindow.instanceManager": "Instanzmanager",
|
||||
"desktop.mainWindow.exit": "Beenden",
|
||||
"desktop.mainWindow.instanceLabel": "Instanz: {0}",
|
||||
"desktop.mainWindow.apiStatus": "API {0}",
|
||||
"desktop.mainWindow.credits": "Credits: ${0:F2} von ${1:F2}",
|
||||
"desktop.mainWindow.creditsNone": "Credits: —",
|
||||
"desktop.mainWindow.dismiss": "Ausblenden",
|
||||
|
||||
"desktop.nav.work": "Arbeiten",
|
||||
"desktop.nav.analytics": "Analyse",
|
||||
"desktop.nav.system": "System",
|
||||
|
||||
"desktop.status.unknown": "unbekannt",
|
||||
"desktop.status.design": "Entwurf",
|
||||
"desktop.status.noApiKey": "kein API-Key",
|
||||
"desktop.status.noUsageData": "keine Nutzungsdaten",
|
||||
"desktop.status.ready": "Bereit",
|
||||
"desktop.status.reachable": "OK",
|
||||
"desktop.status.unreachable": "nicht erreichbar",
|
||||
|
||||
"desktop.chat.agent": "Agent:",
|
||||
"desktop.chat.clearHistory": "Verlauf leeren",
|
||||
"desktop.chat.abort": "Abbrechen",
|
||||
"desktop.chat.inputPlaceholder": "Nachricht eingeben… (Enter zum Senden, Shift+Enter für neue Zeile)",
|
||||
"desktop.chat.send": "Senden",
|
||||
"desktop.chat.statusReady": "Bereit",
|
||||
"desktop.chat.statusSending": "Sende…",
|
||||
"desktop.chat.statusDesign": "Entwurfsmodus",
|
||||
"desktop.chat.noApiKey": "OpenRouter API-Key ist nicht konfiguriert. Bitte in den Einstellungen hinterlegen.",
|
||||
"desktop.chat.noAgent": "Bitte einen Agenten auswählen.",
|
||||
"desktop.chat.emptyMessage": "Bitte eine Nachricht eingeben.",
|
||||
|
||||
"desktop.agents.addAgent": "Agent",
|
||||
"desktop.agents.removeAgent": "Agent",
|
||||
"desktop.agents.runNow": "Jetzt ausf.",
|
||||
"desktop.agents.identity": "Identity",
|
||||
"desktop.agents.soul": "Soul",
|
||||
"desktop.agents.folder": "Ordner",
|
||||
"desktop.agents.save": "Speichern",
|
||||
"desktop.agents.thDisplayName": "ANZEIGENAME",
|
||||
"desktop.agents.thModel": "MODELL",
|
||||
"desktop.agents.thSummary": "KURZINFO",
|
||||
"desktop.agents.kickerGeneralModel": "ALLGEMEIN & MODELL",
|
||||
"desktop.agents.agentId": "Agent-ID",
|
||||
"desktop.agents.displayName": "Anzeigename",
|
||||
"desktop.agents.model": "Modell",
|
||||
"desktop.agents.promptCaching": "Prompt Caching",
|
||||
"desktop.agents.roleDescription": "Rolle / Beschreibung",
|
||||
"desktop.agents.systemPrompt": "System-Prompt (zusätzliche Anweisungen)",
|
||||
"desktop.agents.kickerLimits": "GRENZEN",
|
||||
"desktop.agents.limitsTitle": "Schutzgrenzen (LoopGuard & Budget)",
|
||||
"desktop.agents.maxSteps": "Max. Schritte pro Run",
|
||||
"desktop.agents.timeoutSeconds": "Timeout (Sekunden)",
|
||||
"desktop.agents.maxContextTokens": "Max. Kontext-Tokens",
|
||||
"desktop.agents.maxToolResultChars": "Max. Tool-Ergebnis (Zeichen)",
|
||||
"desktop.agents.dailyCost": "Tagesbudget ($ USD)",
|
||||
"desktop.agents.dailyTokens": "Tagesbudget (Tokens)",
|
||||
"desktop.agents.allowedToolsFor": "ZUGELASSENE WERKZEUGE FÜR {0}",
|
||||
"desktop.agents.thTool": "WERKZEUG",
|
||||
"desktop.agents.thDescription": "BESCHREIBUNG",
|
||||
"desktop.agents.toolSettingsKicker": "WERKZEUG-EINSTELLUNGEN",
|
||||
"desktop.agents.apply": "Übernehmen",
|
||||
"desktop.agents.saved": "Agenten erfolgreich gespeichert.",
|
||||
|
||||
"desktop.tasks.tabJobs": "Geplante Jobs",
|
||||
"desktop.tasks.tabServices": "Dienste",
|
||||
"desktop.tasks.tabHistory": "Verlauf",
|
||||
"desktop.tasks.addJob": "Job hinzufügen",
|
||||
"desktop.tasks.editJob": "Bearbeiten",
|
||||
"desktop.tasks.removeJob": "Entfernen",
|
||||
"desktop.tasks.toggleJob": "Aktivieren/Deaktivieren",
|
||||
"desktop.tasks.runJobNow": "Jetzt ausführen",
|
||||
"desktop.tasks.refresh": "Aktualisieren",
|
||||
"desktop.tasks.thType": "TYP",
|
||||
"desktop.tasks.thAgent": "AGENT",
|
||||
"desktop.tasks.thTask": "TOOL / NACHRICHT",
|
||||
"desktop.tasks.thCron": "CRON",
|
||||
"desktop.tasks.thNextRun": "NÄCHSTER LAUF",
|
||||
"desktop.tasks.thLastRun": "LETZTER LAUF",
|
||||
"desktop.tasks.thStatus": "STATUS",
|
||||
|
||||
"desktop.services.addService": "Dienst hinzufügen",
|
||||
"desktop.services.removeService": "Entfernen",
|
||||
"desktop.services.toggleService": "Aktivieren/Deaktivieren",
|
||||
"desktop.services.thName": "DIENSTNAME",
|
||||
"desktop.services.thType": "TYP",
|
||||
"desktop.services.thPort": "PORT",
|
||||
"desktop.services.thStatus": "STATUS",
|
||||
"desktop.services.thDescription": "BESCHREIBUNG",
|
||||
|
||||
"desktop.history.refresh": "Verlauf aktualisieren",
|
||||
"desktop.history.thTime": "ZEITPUNKT",
|
||||
"desktop.history.thJob": "JOB",
|
||||
"desktop.history.thAgent": "AGENT",
|
||||
"desktop.history.thDescription": "BESCHREIBUNG",
|
||||
"desktop.history.thStatus": "STATUS",
|
||||
"desktop.history.thDetails": "DETAILS",
|
||||
|
||||
"desktop.usage.kickerTokens7d": "TOKENS (7 TAGE)",
|
||||
"desktop.usage.kickerCost7d": "KOSTEN (7 TAGE)",
|
||||
"desktop.usage.kickerRuns7d": "RUNS (7 TAGE)",
|
||||
"desktop.usage.refresh": "Aktualisieren",
|
||||
"desktop.usage.tokensPerDay": "Tokens pro Tag",
|
||||
"desktop.usage.breakdownTitle": "Aufschlüsselung nach Agent & Modell",
|
||||
"desktop.usage.thAgent": "AGENT",
|
||||
"desktop.usage.thModel": "MODELL",
|
||||
"desktop.usage.thTokens": "TOKENS",
|
||||
"desktop.usage.thCost": "KOSTEN",
|
||||
"desktop.usage.thRuns": "RUNS",
|
||||
"desktop.usage.empty": "Noch keine Tokennutzung aufgezeichnet.",
|
||||
|
||||
"desktop.agentChats.agentA": "Agent A:",
|
||||
"desktop.agentChats.agentB": "Agent B:",
|
||||
"desktop.agentChats.empty": "Noch keine Nachrichten zwischen diesen Agenten aufgezeichnet.",
|
||||
"desktop.agentChats.needTwo": "Für einen Verlauf braucht es mindestens zwei Agenten in dieser Instanz.",
|
||||
|
||||
"desktop.backup.kickerManual": "MANUELL",
|
||||
"desktop.backup.titleCreate": "Sicherung erstellen",
|
||||
"desktop.backup.targetFolder": "Zielordner",
|
||||
"desktop.backup.targetFolderPlaceholder": "Zielordner für Sicherungen…",
|
||||
"desktop.backup.browse": "Durchsuchen…",
|
||||
"desktop.backup.credentials": "Zugangsdaten",
|
||||
"desktop.backup.credentialsExclude": "nicht mitsichern",
|
||||
"desktop.backup.credentialsProtect": "mit Passphrase schützen",
|
||||
"desktop.backup.passphrase": "Passphrase eingeben",
|
||||
"desktop.backup.passphraseRepeat": "Passphrase wiederholen",
|
||||
"desktop.backup.scope": "Umfang",
|
||||
"desktop.backup.scopeChat": "Chatverläufe",
|
||||
"desktop.backup.scopeLogs": "Protokolle",
|
||||
"desktop.backup.createNow": "Sicherung jetzt erstellen",
|
||||
"desktop.backup.kickerAuto": "AUTOMATIK",
|
||||
"desktop.backup.titleAuto": "Automatische Sicherung",
|
||||
"desktop.backup.autoDaily": "täglich sichern um",
|
||||
"desktop.backup.time": "Uhrzeit",
|
||||
"desktop.backup.keep": "Aufbewahren",
|
||||
"desktop.backup.autoHint": "Die Automatik sichert ohne Zugangsdaten — eine gespeicherte Passphrase wäre wirkungslos.",
|
||||
"desktop.backup.kickerExisting": "BESTAND",
|
||||
"desktop.backup.titleExisting": "Vorhandene Sicherungen",
|
||||
"desktop.backup.refresh": "Aktualisieren",
|
||||
"desktop.backup.openFolder": "Ordner öffnen",
|
||||
"desktop.backup.delete": "Löschen",
|
||||
"desktop.backup.restore": "Wiederherstellen…",
|
||||
"desktop.backup.thFilename": "DATEINAME",
|
||||
"desktop.backup.thCreatedAt": "ERSTELLT AM",
|
||||
"desktop.backup.thInstance": "INSTANZ",
|
||||
"desktop.backup.thSize": "GRÖSSE",
|
||||
"desktop.backup.thSecrets": "ZUGANGSDATEN",
|
||||
|
||||
"desktop.logs.module": "Modul:",
|
||||
"desktop.logs.level": "Stufe:",
|
||||
"desktop.logs.refresh": "Aktualisieren",
|
||||
"desktop.logs.clear": "Leeren",
|
||||
"desktop.logs.openFolder": "Ordner öffnen",
|
||||
"desktop.logs.follow": "Mitlaufen",
|
||||
|
||||
"desktop.settings.discard": "Verwerfen",
|
||||
"desktop.settings.save": "Speichern",
|
||||
"desktop.settings.instance": "INSTANZ",
|
||||
"desktop.settings.instanceName": "Instanz-Name",
|
||||
"desktop.settings.apiKey": "OpenRouter API-Key",
|
||||
"desktop.settings.autostart": "Autostart durch Manager",
|
||||
"desktop.settings.autostartHint": "Der Instanzmanager startet diese Instanz, wenn er hochkommt, und wieder, wenn sie abstürzt. Nach mehreren Neustarts in kurzer Folge setzt er aus und meldet es.",
|
||||
"desktop.settings.logDir": "Protokoll-Verzeichnis",
|
||||
"desktop.settings.logDirHint": "Gilt nur für diese Instanz. Leer heißt: Unterordner Logs im Instanzverzeichnis.",
|
||||
"desktop.settings.dailyCost": "Tagesbudget ($ USD)",
|
||||
"desktop.settings.dailyTokens": "Tagesbudget (Tokens)",
|
||||
"desktop.settings.general": "ALLGEMEIN",
|
||||
"desktop.settings.instancesDir": "Instanzen-Verzeichnis",
|
||||
"desktop.settings.minLogLevel": "Minimaler Log-Level",
|
||||
"desktop.settings.openRouterUrl": "OpenRouter Base-URL",
|
||||
"desktop.settings.language": "Sprache",
|
||||
"desktop.settings.dcAndLicense": "DEPLOYMENTCENTER & LIZENZ",
|
||||
"desktop.settings.dcUrl": "Server-URL",
|
||||
"desktop.settings.dcToken": "Master-Token",
|
||||
"desktop.settings.dcEnv": "Umgebung",
|
||||
"desktop.settings.updateChannel": "Update-Kanal",
|
||||
"desktop.settings.licenseKey": "Lizenzschlüssel",
|
||||
"desktop.settings.errorReporting": "Fehler automatisch an Deploymentcenter melden",
|
||||
"desktop.settings.updateCheck": "Beim Start automatisch auf Updates prüfen",
|
||||
"desktop.settings.saved": "Einstellungen und Instanz-Konfiguration gespeichert.",
|
||||
"desktop.settings.savedLogRestart": "Gespeichert. Das Protokoll-Verzeichnis gilt ab dem nächsten Start.",
|
||||
|
||||
"desktop.info.kickerApp": "ANWENDUNG",
|
||||
"desktop.info.build": "Build",
|
||||
"desktop.info.version": "Version",
|
||||
"desktop.info.buildSummary": "Build-Zusammenfassung",
|
||||
"desktop.info.kickerInstance": "INSTANZ",
|
||||
"desktop.info.currentInstance": "Aktuelle Instanz",
|
||||
"desktop.info.openFolder": "Instanz-Ordner öffnen",
|
||||
"desktop.info.name": "Name",
|
||||
"desktop.info.id": "ID",
|
||||
"desktop.info.path": "Pfad",
|
||||
"desktop.info.logDir": "Log-Ordner",
|
||||
"desktop.info.openRouter": "OpenRouter",
|
||||
"desktop.info.kickerModules": "MODULE",
|
||||
"desktop.info.assemblies": "Baugruppen",
|
||||
"desktop.info.thModule": "MODUL",
|
||||
"desktop.info.thBuild": "BUILD",
|
||||
"desktop.info.thBuildDate": "BUILD-DATUM",
|
||||
"desktop.info.thChanges": "ÄNDERUNGEN",
|
||||
|
||||
"desktop.dialog.addAgent": "Neuen Agenten anlegen",
|
||||
"desktop.dialog.agentId": "Agent-ID (eindeutiger Schlüssel):",
|
||||
"desktop.dialog.agentDisplayName": "Anzeigename:",
|
||||
"desktop.dialog.defaultModel": "Standard-Modell:",
|
||||
"desktop.dialog.roleDescription": "Beschreibung / Rolle:",
|
||||
"desktop.dialog.addJobTitle": "Job hinzufügen / bearbeiten",
|
||||
"desktop.dialog.jobType": "Job-Typ:",
|
||||
"desktop.dialog.agentWakeup": "Agent Wakeup (Periodische Ausführung)",
|
||||
"desktop.dialog.toolJob": "Tool Job (Werkzeug-spezifischer Job)",
|
||||
"desktop.dialog.jobTypeId": "Job-Typ-ID / Name:",
|
||||
"desktop.dialog.taskMessage": "Aufgabenbeschreibung / Nachricht:",
|
||||
"desktop.dialog.cronExpression": "Cron-Ausdruck:",
|
||||
"desktop.dialog.cronHint": "Syntax: Min Std Tag Mon Wochentag (z.B. '*/15 * * * *' alle 15 Minuten)",
|
||||
"desktop.dialog.runOnStart": "Beim Anwendungsstart einmalig sofort ausführen",
|
||||
"desktop.dialog.addServiceTitle": "Dienst (Service) hinzufügen",
|
||||
"desktop.dialog.serviceName": "Name des Dienstes:",
|
||||
"desktop.dialog.serviceType": "Typ:",
|
||||
"desktop.dialog.servicePort": "Port:",
|
||||
"desktop.dialog.serviceDesc": "Beschreibung:",
|
||||
"desktop.dialog.restoreTitle": "Sicherung wiederherstellen",
|
||||
"desktop.dialog.backupInfo": "Sicherungsinformationen",
|
||||
"desktop.dialog.backupInstance": "Instanz: {0}",
|
||||
"desktop.dialog.backupCreated": "Erstellt: {0:g}",
|
||||
"desktop.dialog.backupFiles": "Dateien: {0}",
|
||||
"desktop.dialog.backupSecrets": "Zugangsdaten: {0}",
|
||||
"desktop.dialog.targetDir": "Zielordner:",
|
||||
"desktop.dialog.chooseFolder": "Ordner wählen",
|
||||
"desktop.dialog.restoreHint": "Hinweis: Es wird empfohlen, in einen neuen Ordner wiederherzustellen, um Konflikte mit laufenden Prozessen zu vermeiden.",
|
||||
"desktop.dialog.passphrase": "Passphrase:",
|
||||
"desktop.dialog.passphraseProtected": "Diese Sicherung enthält geschützte Zugangsdaten.",
|
||||
"desktop.dialog.overwriteExisting": "Vorhandene Dateien im Zielordner überschreiben",
|
||||
"desktop.dialog.licenseTitle": "ClawdDotNet – Lizenz",
|
||||
"desktop.dialog.licenseKey": "Lizenzschlüssel",
|
||||
"desktop.dialog.hardwareId": "Hardware-ID (für den Support):",
|
||||
"desktop.dialog.verify": "Prüfen",
|
||||
"desktop.dialog.textEditorTitle": "Text bearbeiten",
|
||||
|
||||
"desktop.instancePicker.titleSwitch": "Instanz wechseln",
|
||||
"desktop.instancePicker.titleSelect": "Instanz wählen",
|
||||
"desktop.instancePicker.hintSwitch": "Jede Instanz läuft unabhängig mit eigenen Agenten und Daten. Wechseln startet ClawdDotNet mit der gewählten Instanz neu.",
|
||||
"desktop.instancePicker.hintSelect": "Jede Instanz läuft unabhängig mit eigenen Agenten und Daten.",
|
||||
"desktop.instancePicker.confirmSwitch": "Wechseln",
|
||||
"desktop.instancePicker.confirmStart": "Starten",
|
||||
"desktop.instancePicker.newInstancePlaceholder": "Name der neuen Instanz",
|
||||
"desktop.instancePicker.create": "Anlegen",
|
||||
"desktop.instancePicker.active": "Aktiv",
|
||||
"desktop.instancePicker.dirLabel": "Verzeichnis: {0}",
|
||||
"desktop.instancePicker.agentsCount": "{0} Agenten · API-Key {1}",
|
||||
"desktop.instancePicker.apiKeyConfigured": "konfiguriert",
|
||||
"desktop.instancePicker.apiKeyMissing": "fehlt",
|
||||
"desktop.instancePicker.tooltipConfigured": "API-Key hinterlegt",
|
||||
"desktop.instancePicker.tooltipMissing": "Kein API-Key — Agenten bleiben deaktiviert",
|
||||
"desktop.instancePicker.nameRequired": "Bitte einen Instanznamen eingeben.",
|
||||
"desktop.instancePicker.createFailed": "Instanz konnte nicht angelegt werden: {0}",
|
||||
|
||||
"desktop.startMode.title": "ClawdDotNet – Startmodus wählen",
|
||||
"desktop.startMode.question": "Wie möchtest du ClawdDotNet starten?",
|
||||
"desktop.startMode.managerBtn": "Instanzmanager starten (Empfohlen)",
|
||||
"desktop.startMode.standaloneBtn": "Als Standalone-Instanz starten",
|
||||
"desktop.startMode.explanation": "• Instanzmanager (Empfohlen):\n Startet den zentralen Hintergrund-Manager und öffnet die Verwaltung im Browser. Ermöglicht den stabilen Dauerbetrieb mehrerer Instanzen parallel ohne Absturzrisiko.\n\n• Standalone-Modus:\n Startet genau eine Instanz direkt als einzelnes Desktop-Fenster.",
|
||||
|
||||
"desktop.standaloneSwitch.title": "ClawdDotNet – Instanzwechsel (Standalone)",
|
||||
"desktop.standaloneSwitch.warning": "Achtung: Standalone-Modus",
|
||||
"desktop.standaloneSwitch.text": "Diese Instanz läuft eigenständig ohne Instanzmanager.\n\nWenn du die Instanz hier wechselst, wird diese Instanz vollständig beendet und alle laufenden Agenten und Hintergrunddienste werden gestoppt.\n\nEmpfehlung: Starte stattdessen den Instanzmanager, um mehrere Instanzen gleichzeitig und unabhängig voneinander zu betreiben.",
|
||||
"desktop.standaloneSwitch.switchAnyway": "Instanz trotzdem wechseln",
|
||||
|
||||
"desktop.toolSettings.noSettings": "Dieses Werkzeug benötigt keine weiteren Einstellungen.",
|
||||
"desktop.toolSettings.host": "Host",
|
||||
"desktop.toolSettings.port": "Port",
|
||||
"desktop.toolSettings.username": "Benutzername",
|
||||
"desktop.toolSettings.password": "Passwort",
|
||||
"desktop.toolSettings.rootPath": "Root-Pfad",
|
||||
"desktop.toolSettings.imapHost": "IMAP-Host",
|
||||
"desktop.toolSettings.imapPort": "IMAP-Port",
|
||||
"desktop.toolSettings.smtpHost": "SMTP-Host",
|
||||
"desktop.toolSettings.smtpPort": "SMTP-Port",
|
||||
"desktop.toolSettings.allowedRecipients": "Erlaubte Empfänger",
|
||||
"desktop.toolSettings.type": "Typ",
|
||||
"desktop.toolSettings.connectionString": "Connection-String",
|
||||
"desktop.toolSettings.accessLevel": "Zugriffsebene",
|
||||
"desktop.toolSettings.allowedTables": "Erlaubte Tabellen",
|
||||
"desktop.toolSettings.botToken": "Bot-Token",
|
||||
"desktop.toolSettings.defaultChatId": "Standard Chat-ID",
|
||||
"desktop.toolSettings.allowedChatIds": "Erlaubte Chat-IDs",
|
||||
"desktop.toolSettings.defaultProvider": "Standard-Provider",
|
||||
"desktop.toolSettings.cacheTtl": "Cache TTL (Sekunden)",
|
||||
"desktop.toolSettings.twelveDataKey": "Twelve Data Key",
|
||||
"desktop.toolSettings.alphaVantageKey": "Alpha Vantage Key",
|
||||
"desktop.toolSettings.allowedDomains": "Erlaubte Domains",
|
||||
"desktop.toolSettings.maxResponseKb": "Max. Antwortgröße (KB)",
|
||||
"desktop.toolSettings.userAgent": "User Agent",
|
||||
"desktop.toolSettings.xApiKey": "X (Twitter) API-Key",
|
||||
"desktop.toolSettings.xAccounts": "X Accounts",
|
||||
"desktop.toolSettings.subreddits": "Subreddits",
|
||||
"desktop.toolSettings.redditPostLimit": "Reddit Post Limit",
|
||||
"desktop.toolSettings.openRouterKey": "OpenRouter Key",
|
||||
"desktop.toolSettings.sttModel": "STT-Modell",
|
||||
"desktop.toolSettings.youtubeChannels": "YouTube-Kanäle",
|
||||
"desktop.toolSettings.fileRwPersonalExt": "Erlaubte Dateiendungen (persönlich)",
|
||||
"desktop.toolSettings.fileRwSharedAccess": "Zugriffsebene (geteilt)",
|
||||
"desktop.toolSettings.fileRwSharedExt": "Erlaubte Dateiendungen (geteilt)",
|
||||
"desktop.toolSettings.fileRwProtectedPaths": "Geschützte Pfade",
|
||||
|
||||
"nav.chat": "Chat",
|
||||
"nav.agents": "Agenten",
|
||||
"nav.tasks": "Aufgaben",
|
||||
"nav.usage": "Tokennutzung",
|
||||
"nav.agentChats": "Agenten-Chats",
|
||||
"nav.backup": "Sicherung",
|
||||
"nav.logs": "Protokoll",
|
||||
"nav.settings": "Einstellungen",
|
||||
"nav.info": "Info",
|
||||
|
||||
"common.all": "Alle",
|
||||
"common.save": "Speichern",
|
||||
"common.cancel": "Abbrechen",
|
||||
"common.delete": "Löschen",
|
||||
"common.edit": "Bearbeiten",
|
||||
"common.refresh": "Aktualisieren",
|
||||
"common.close": "Schließen",
|
||||
"common.discard": "Verwerfen",
|
||||
"common.ready": "Bereit",
|
||||
"common.loading": "Lade…",
|
||||
"common.create": "Anlegen",
|
||||
"common.add": "Hinzufügen",
|
||||
"common.apply": "Übernehmen",
|
||||
"common.ok": "OK",
|
||||
"common.exit": "Beenden"
|
||||
}
|
||||
@@ -0,0 +1,339 @@
|
||||
{
|
||||
"desktop.mainWindow.title": "ClawdDotNet",
|
||||
"desktop.mainWindow.sidebarTooltip": "Toggle sidebar",
|
||||
"desktop.mainWindow.switchInstance": "Switch instance",
|
||||
"desktop.mainWindow.instance": "INSTANCE",
|
||||
"desktop.mainWindow.themeLight": "Light Mode",
|
||||
"desktop.mainWindow.themeDark": "Dark Mode",
|
||||
"desktop.mainWindow.themeToggle": "Toggle theme",
|
||||
"desktop.mainWindow.openInstanceFolder": "Open Instance Folder",
|
||||
"desktop.mainWindow.instanceManager": "Instance Manager",
|
||||
"desktop.mainWindow.exit": "Exit",
|
||||
"desktop.mainWindow.instanceLabel": "Instance: {0}",
|
||||
"desktop.mainWindow.apiStatus": "API {0}",
|
||||
"desktop.mainWindow.credits": "Credits: ${0:F2} of ${1:F2}",
|
||||
"desktop.mainWindow.creditsNone": "Credits: —",
|
||||
"desktop.mainWindow.dismiss": "Dismiss",
|
||||
|
||||
"desktop.nav.work": "Work",
|
||||
"desktop.nav.analytics": "Analytics",
|
||||
"desktop.nav.system": "System",
|
||||
|
||||
"desktop.status.unknown": "unknown",
|
||||
"desktop.status.design": "Design",
|
||||
"desktop.status.noApiKey": "no API key",
|
||||
"desktop.status.noUsageData": "no usage data",
|
||||
"desktop.status.ready": "Ready",
|
||||
"desktop.status.reachable": "OK",
|
||||
"desktop.status.unreachable": "unreachable",
|
||||
|
||||
"desktop.chat.agent": "Agent:",
|
||||
"desktop.chat.clearHistory": "Clear History",
|
||||
"desktop.chat.abort": "Abort",
|
||||
"desktop.chat.inputPlaceholder": "Type message… (Enter to send, Shift+Enter for new line)",
|
||||
"desktop.chat.send": "Send",
|
||||
"desktop.chat.statusReady": "Ready",
|
||||
"desktop.chat.statusSending": "Sending…",
|
||||
"desktop.chat.statusDesign": "Design Mode",
|
||||
"desktop.chat.noApiKey": "OpenRouter API key is not configured. Please enter the key in Settings.",
|
||||
"desktop.chat.noAgent": "Please select an agent.",
|
||||
"desktop.chat.emptyMessage": "Please enter a message.",
|
||||
|
||||
"desktop.agents.addAgent": "Agent",
|
||||
"desktop.agents.removeAgent": "Agent",
|
||||
"desktop.agents.runNow": "Run Now",
|
||||
"desktop.agents.identity": "Identity",
|
||||
"desktop.agents.soul": "Soul",
|
||||
"desktop.agents.folder": "Folder",
|
||||
"desktop.agents.save": "Save",
|
||||
"desktop.agents.thDisplayName": "DISPLAY NAME",
|
||||
"desktop.agents.thModel": "MODEL",
|
||||
"desktop.agents.thSummary": "SUMMARY",
|
||||
"desktop.agents.kickerGeneralModel": "GENERAL & MODEL",
|
||||
"desktop.agents.agentId": "Agent ID",
|
||||
"desktop.agents.displayName": "Display Name",
|
||||
"desktop.agents.model": "Model",
|
||||
"desktop.agents.promptCaching": "Prompt Caching",
|
||||
"desktop.agents.roleDescription": "Role / Description",
|
||||
"desktop.agents.systemPrompt": "System Prompt (additional instructions)",
|
||||
"desktop.agents.kickerLimits": "LIMITS",
|
||||
"desktop.agents.limitsTitle": "Guardrails (LoopGuard & Budget)",
|
||||
"desktop.agents.maxSteps": "Max Steps per Run",
|
||||
"desktop.agents.timeoutSeconds": "Timeout (seconds)",
|
||||
"desktop.agents.maxContextTokens": "Max Context Tokens",
|
||||
"desktop.agents.maxToolResultChars": "Max Tool Result (chars)",
|
||||
"desktop.agents.dailyCost": "Daily Budget ($ USD)",
|
||||
"desktop.agents.dailyTokens": "Daily Budget (Tokens)",
|
||||
"desktop.agents.allowedToolsFor": "ALLOWED TOOLS FOR {0}",
|
||||
"desktop.agents.thTool": "TOOL",
|
||||
"desktop.agents.thDescription": "DESCRIPTION",
|
||||
"desktop.agents.toolSettingsKicker": "TOOL SETTINGS",
|
||||
"desktop.agents.apply": "Apply",
|
||||
"desktop.agents.saved": "Agents saved successfully.",
|
||||
|
||||
"desktop.tasks.tabJobs": "Scheduled Jobs",
|
||||
"desktop.tasks.tabServices": "Services",
|
||||
"desktop.tasks.tabHistory": "History",
|
||||
"desktop.tasks.addJob": "Add Job",
|
||||
"desktop.tasks.editJob": "Edit",
|
||||
"desktop.tasks.removeJob": "Remove",
|
||||
"desktop.tasks.toggleJob": "Enable/Disable",
|
||||
"desktop.tasks.runJobNow": "Run Now",
|
||||
"desktop.tasks.refresh": "Refresh",
|
||||
"desktop.tasks.thType": "TYPE",
|
||||
"desktop.tasks.thAgent": "AGENT",
|
||||
"desktop.tasks.thTask": "TOOL / MESSAGE",
|
||||
"desktop.tasks.thCron": "CRON",
|
||||
"desktop.tasks.thNextRun": "NEXT RUN",
|
||||
"desktop.tasks.thLastRun": "LAST RUN",
|
||||
"desktop.tasks.thStatus": "STATUS",
|
||||
|
||||
"desktop.services.addService": "Add Service",
|
||||
"desktop.services.removeService": "Remove",
|
||||
"desktop.services.toggleService": "Enable/Disable",
|
||||
"desktop.services.thName": "SERVICE NAME",
|
||||
"desktop.services.thType": "TYPE",
|
||||
"desktop.services.thPort": "PORT",
|
||||
"desktop.services.thStatus": "STATUS",
|
||||
"desktop.services.thDescription": "DESCRIPTION",
|
||||
|
||||
"desktop.history.refresh": "Refresh History",
|
||||
"desktop.history.thTime": "TIMESTAMP",
|
||||
"desktop.history.thJob": "JOB",
|
||||
"desktop.history.thAgent": "AGENT",
|
||||
"desktop.history.thDescription": "DESCRIPTION",
|
||||
"desktop.history.thStatus": "STATUS",
|
||||
"desktop.history.thDetails": "DETAILS",
|
||||
|
||||
"desktop.usage.kickerTokens7d": "TOKENS (7 DAYS)",
|
||||
"desktop.usage.kickerCost7d": "COST (7 DAYS)",
|
||||
"desktop.usage.kickerRuns7d": "RUNS (7 DAYS)",
|
||||
"desktop.usage.refresh": "Refresh",
|
||||
"desktop.usage.tokensPerDay": "Tokens per Day",
|
||||
"desktop.usage.breakdownTitle": "Breakdown by Agent & Model",
|
||||
"desktop.usage.thAgent": "AGENT",
|
||||
"desktop.usage.thModel": "MODEL",
|
||||
"desktop.usage.thTokens": "TOKENS",
|
||||
"desktop.usage.thCost": "COST",
|
||||
"desktop.usage.thRuns": "RUNS",
|
||||
"desktop.usage.empty": "No token usage recorded yet.",
|
||||
|
||||
"desktop.agentChats.agentA": "Agent A:",
|
||||
"desktop.agentChats.agentB": "Agent B:",
|
||||
"desktop.agentChats.empty": "No messages between these agents yet.",
|
||||
"desktop.agentChats.needTwo": "At least two agents are required in this instance to view a conversation history.",
|
||||
|
||||
"desktop.backup.kickerManual": "MANUAL",
|
||||
"desktop.backup.titleCreate": "Create Backup",
|
||||
"desktop.backup.targetFolder": "Target Folder",
|
||||
"desktop.backup.targetFolderPlaceholder": "Target folder for backups…",
|
||||
"desktop.backup.browse": "Browse…",
|
||||
"desktop.backup.credentials": "Credentials",
|
||||
"desktop.backup.credentialsExclude": "do not include",
|
||||
"desktop.backup.credentialsProtect": "protect with passphrase",
|
||||
"desktop.backup.passphrase": "Enter passphrase",
|
||||
"desktop.backup.passphraseRepeat": "Repeat passphrase",
|
||||
"desktop.backup.scope": "Scope",
|
||||
"desktop.backup.scopeChat": "Chat history",
|
||||
"desktop.backup.scopeLogs": "Logs",
|
||||
"desktop.backup.createNow": "Create Backup Now",
|
||||
"desktop.backup.kickerAuto": "AUTOMATIC",
|
||||
"desktop.backup.titleAuto": "Automatic Backup",
|
||||
"desktop.backup.autoDaily": "daily backup at",
|
||||
"desktop.backup.time": "Time",
|
||||
"desktop.backup.keep": "Keep Count",
|
||||
"desktop.backup.autoHint": "Automatic backup excludes credentials — a saved passphrase would be ineffective.",
|
||||
"desktop.backup.kickerExisting": "EXISTING",
|
||||
"desktop.backup.titleExisting": "Existing Backups",
|
||||
"desktop.backup.refresh": "Refresh",
|
||||
"desktop.backup.openFolder": "Open Folder",
|
||||
"desktop.backup.delete": "Delete",
|
||||
"desktop.backup.restore": "Restore…",
|
||||
"desktop.backup.thFilename": "FILENAME",
|
||||
"desktop.backup.thCreatedAt": "CREATED AT",
|
||||
"desktop.backup.thInstance": "INSTANCE",
|
||||
"desktop.backup.thSize": "SIZE",
|
||||
"desktop.backup.thSecrets": "CREDENTIALS",
|
||||
|
||||
"desktop.logs.module": "Module:",
|
||||
"desktop.logs.level": "Level:",
|
||||
"desktop.logs.refresh": "Refresh",
|
||||
"desktop.logs.clear": "Clear",
|
||||
"desktop.logs.openFolder": "Open Folder",
|
||||
"desktop.logs.follow": "Follow Tail",
|
||||
|
||||
"desktop.settings.discard": "Discard",
|
||||
"desktop.settings.save": "Save",
|
||||
"desktop.settings.instance": "INSTANCE",
|
||||
"desktop.settings.instanceName": "Instance Name",
|
||||
"desktop.settings.apiKey": "OpenRouter API Key",
|
||||
"desktop.settings.autostart": "Autostart by Manager",
|
||||
"desktop.settings.autostartHint": "The instance manager starts this instance on launch and restarts it if it crashes.",
|
||||
"desktop.settings.logDir": "Log Directory",
|
||||
"desktop.settings.logDirHint": "Applies only to this instance. Empty means: Logs subfolder in instance directory.",
|
||||
"desktop.settings.dailyCost": "Daily Budget ($ USD)",
|
||||
"desktop.settings.dailyTokens": "Daily Budget (Tokens)",
|
||||
"desktop.settings.general": "GENERAL",
|
||||
"desktop.settings.instancesDir": "Instances Directory",
|
||||
"desktop.settings.minLogLevel": "Minimum Log Level",
|
||||
"desktop.settings.openRouterUrl": "OpenRouter Base URL",
|
||||
"desktop.settings.language": "Language",
|
||||
"desktop.settings.dcAndLicense": "DEPLOYMENTCENTER & LICENSE",
|
||||
"desktop.settings.dcUrl": "Server URL",
|
||||
"desktop.settings.dcToken": "Master Token",
|
||||
"desktop.settings.dcEnv": "Environment",
|
||||
"desktop.settings.updateChannel": "Update Channel",
|
||||
"desktop.settings.licenseKey": "License Key",
|
||||
"desktop.settings.errorReporting": "Automatically report errors to Deploymentcenter",
|
||||
"desktop.settings.updateCheck": "Check for updates automatically on startup",
|
||||
"desktop.settings.saved": "Settings and instance configuration saved successfully.",
|
||||
"desktop.settings.savedLogRestart": "Saved. The log directory will take effect upon next restart.",
|
||||
|
||||
"desktop.info.kickerApp": "APPLICATION",
|
||||
"desktop.info.build": "Build",
|
||||
"desktop.info.version": "Version",
|
||||
"desktop.info.buildSummary": "Build Summary",
|
||||
"desktop.info.kickerInstance": "INSTANCE",
|
||||
"desktop.info.currentInstance": "Current Instance",
|
||||
"desktop.info.openFolder": "Open Instance Folder",
|
||||
"desktop.info.name": "Name",
|
||||
"desktop.info.id": "ID",
|
||||
"desktop.info.path": "Path",
|
||||
"desktop.info.logDir": "Log Directory",
|
||||
"desktop.info.openRouter": "OpenRouter",
|
||||
"desktop.info.kickerModules": "MODULES",
|
||||
"desktop.info.assemblies": "Assemblies",
|
||||
"desktop.info.thModule": "MODULE",
|
||||
"desktop.info.thBuild": "BUILD",
|
||||
"desktop.info.thBuildDate": "BUILD DATE",
|
||||
"desktop.info.thChanges": "CHANGES",
|
||||
|
||||
"desktop.dialog.addAgent": "Create New Agent",
|
||||
"desktop.dialog.agentId": "Agent ID (unique key):",
|
||||
"desktop.dialog.agentDisplayName": "Display Name:",
|
||||
"desktop.dialog.defaultModel": "Default Model:",
|
||||
"desktop.dialog.roleDescription": "Description / Role:",
|
||||
"desktop.dialog.addJobTitle": "Add / Edit Job",
|
||||
"desktop.dialog.jobType": "Job Type:",
|
||||
"desktop.dialog.agentWakeup": "Agent Wakeup (Periodic Execution)",
|
||||
"desktop.dialog.toolJob": "Tool Job (Tool-specific Job)",
|
||||
"desktop.dialog.jobTypeId": "Job Type ID / Name:",
|
||||
"desktop.dialog.taskMessage": "Task Description / Message:",
|
||||
"desktop.dialog.cronExpression": "Cron Expression:",
|
||||
"desktop.dialog.cronHint": "Syntax: Min Hour Day Month Weekday (e.g. '*/15 * * * *' every 15 minutes)",
|
||||
"desktop.dialog.runOnStart": "Run once immediately on application startup",
|
||||
"desktop.dialog.addServiceTitle": "Add Service",
|
||||
"desktop.dialog.serviceName": "Service Name:",
|
||||
"desktop.dialog.serviceType": "Type:",
|
||||
"desktop.dialog.servicePort": "Port:",
|
||||
"desktop.dialog.serviceDesc": "Description:",
|
||||
"desktop.dialog.restoreTitle": "Restore Backup",
|
||||
"desktop.dialog.backupInfo": "Backup Information",
|
||||
"desktop.dialog.backupInstance": "Instance: {0}",
|
||||
"desktop.dialog.backupCreated": "Created: {0:g}",
|
||||
"desktop.dialog.backupFiles": "Files: {0}",
|
||||
"desktop.dialog.backupSecrets": "Credentials: {0}",
|
||||
"desktop.dialog.targetDir": "Target Directory:",
|
||||
"desktop.dialog.chooseFolder": "Choose Folder",
|
||||
"desktop.dialog.restoreHint": "Note: It is recommended to restore into a new folder to avoid conflicts with running processes.",
|
||||
"desktop.dialog.passphrase": "Passphrase:",
|
||||
"desktop.dialog.passphraseProtected": "This backup contains protected credentials.",
|
||||
"desktop.dialog.overwriteExisting": "Overwrite existing files in target folder",
|
||||
"desktop.dialog.licenseTitle": "ClawdDotNet – License",
|
||||
"desktop.dialog.licenseKey": "License Key",
|
||||
"desktop.dialog.hardwareId": "Hardware ID (for support):",
|
||||
"desktop.dialog.verify": "Verify",
|
||||
"desktop.dialog.textEditorTitle": "Edit Text",
|
||||
|
||||
"desktop.instancePicker.titleSwitch": "Switch Instance",
|
||||
"desktop.instancePicker.titleSelect": "Choose Instance",
|
||||
"desktop.instancePicker.hintSwitch": "Each instance runs independently with its own agents and data. Switching restarts ClawdDotNet with the selected instance.",
|
||||
"desktop.instancePicker.hintSelect": "Each instance runs independently with its own agents and data.",
|
||||
"desktop.instancePicker.confirmSwitch": "Switch",
|
||||
"desktop.instancePicker.confirmStart": "Start",
|
||||
"desktop.instancePicker.newInstancePlaceholder": "Name of new instance",
|
||||
"desktop.instancePicker.create": "Create",
|
||||
"desktop.instancePicker.active": "Active",
|
||||
"desktop.instancePicker.dirLabel": "Directory: {0}",
|
||||
"desktop.instancePicker.agentsCount": "{0} Agents · API Key {1}",
|
||||
"desktop.instancePicker.apiKeyConfigured": "configured",
|
||||
"desktop.instancePicker.apiKeyMissing": "missing",
|
||||
"desktop.instancePicker.tooltipConfigured": "API key configured",
|
||||
"desktop.instancePicker.tooltipMissing": "No API key — agents remain inactive",
|
||||
"desktop.instancePicker.nameRequired": "Please enter an instance name.",
|
||||
"desktop.instancePicker.createFailed": "Instance could not be created: {0}",
|
||||
|
||||
"desktop.startMode.title": "ClawdDotNet – Select Start Mode",
|
||||
"desktop.startMode.question": "How would you like to start ClawdDotNet?",
|
||||
"desktop.startMode.managerBtn": "Launch Instance Manager (Recommended)",
|
||||
"desktop.startMode.standaloneBtn": "Start as Standalone Instance",
|
||||
"desktop.startMode.explanation": "• Instance Manager (Recommended):\n Starts the central background manager and opens management in your browser. Enables stable parallel operation of multiple instances without crash risks.\n\n• Standalone Mode:\n Starts exactly one instance directly as a single desktop window.",
|
||||
|
||||
"desktop.standaloneSwitch.title": "ClawdDotNet – Instance Switch (Standalone)",
|
||||
"desktop.standaloneSwitch.warning": "Attention: Standalone Mode",
|
||||
"desktop.standaloneSwitch.text": "This instance runs standalone without the Instance Manager.\n\nIf you switch instances here, this instance will be fully stopped and all running agents and background services will end.\n\nRecommendation: Launch the Instance Manager instead to run multiple instances concurrently and independently.",
|
||||
"desktop.standaloneSwitch.switchAnyway": "Switch Instance Anyway",
|
||||
|
||||
"desktop.toolSettings.noSettings": "This tool does not require additional settings.",
|
||||
"desktop.toolSettings.host": "Host",
|
||||
"desktop.toolSettings.port": "Port",
|
||||
"desktop.toolSettings.username": "Username",
|
||||
"desktop.toolSettings.password": "Password",
|
||||
"desktop.toolSettings.rootPath": "Root Path",
|
||||
"desktop.toolSettings.imapHost": "IMAP Host",
|
||||
"desktop.toolSettings.imapPort": "IMAP Port",
|
||||
"desktop.toolSettings.smtpHost": "SMTP Host",
|
||||
"desktop.toolSettings.smtpPort": "SMTP Port",
|
||||
"desktop.toolSettings.allowedRecipients": "Allowed Recipients",
|
||||
"desktop.toolSettings.type": "Type",
|
||||
"desktop.toolSettings.connectionString": "Connection String",
|
||||
"desktop.toolSettings.accessLevel": "Access Level",
|
||||
"desktop.toolSettings.allowedTables": "Allowed Tables",
|
||||
"desktop.toolSettings.botToken": "Bot Token",
|
||||
"desktop.toolSettings.defaultChatId": "Default Chat ID",
|
||||
"desktop.toolSettings.allowedChatIds": "Allowed Chat IDs",
|
||||
"desktop.toolSettings.defaultProvider": "Default Provider",
|
||||
"desktop.toolSettings.cacheTtl": "Cache TTL (seconds)",
|
||||
"desktop.toolSettings.twelveDataKey": "Twelve Data Key",
|
||||
"desktop.toolSettings.alphaVantageKey": "Alpha Vantage Key",
|
||||
"desktop.toolSettings.allowedDomains": "Allowed Domains",
|
||||
"desktop.toolSettings.maxResponseKb": "Max Response Size (KB)",
|
||||
"desktop.toolSettings.userAgent": "User Agent",
|
||||
"desktop.toolSettings.xApiKey": "X (Twitter) API Key",
|
||||
"desktop.toolSettings.xAccounts": "X Accounts",
|
||||
"desktop.toolSettings.subreddits": "Subreddits",
|
||||
"desktop.toolSettings.redditPostLimit": "Reddit Post Limit",
|
||||
"desktop.toolSettings.openRouterKey": "OpenRouter Key",
|
||||
"desktop.toolSettings.sttModel": "STT Model",
|
||||
"desktop.toolSettings.youtubeChannels": "YouTube Channels",
|
||||
"desktop.toolSettings.fileRwPersonalExt": "Allowed File Extensions (personal)",
|
||||
"desktop.toolSettings.fileRwSharedAccess": "Access Level (shared)",
|
||||
"desktop.toolSettings.fileRwSharedExt": "Allowed File Extensions (shared)",
|
||||
"desktop.toolSettings.fileRwProtectedPaths": "Protected Paths",
|
||||
|
||||
"nav.chat": "Chat",
|
||||
"nav.agents": "Agents",
|
||||
"nav.tasks": "Tasks",
|
||||
"nav.usage": "Token Usage",
|
||||
"nav.agentChats": "Agent Chats",
|
||||
"nav.backup": "Backup",
|
||||
"nav.logs": "Logs",
|
||||
"nav.settings": "Settings",
|
||||
"nav.info": "Info",
|
||||
|
||||
"common.all": "All",
|
||||
"common.save": "Save",
|
||||
"common.cancel": "Cancel",
|
||||
"common.delete": "Delete",
|
||||
"common.edit": "Edit",
|
||||
"common.refresh": "Refresh",
|
||||
"common.close": "Close",
|
||||
"common.discard": "Discard",
|
||||
"common.ready": "Ready",
|
||||
"common.loading": "Loading…",
|
||||
"common.create": "Create",
|
||||
"common.add": "Add",
|
||||
"common.apply": "Apply",
|
||||
"common.ok": "OK",
|
||||
"common.exit": "Exit"
|
||||
}
|
||||
Reference in New Issue
Block a user